RU: Frame of Reference (2)

Геометрические примитивы

Система координат

Продолжение Frame of Reference (1)

Двумерная система координат

Для описания ортогональной двумерной системы координат (в трехмерном пространстве) предназначен класс gp_Ax2. Двумерная система координат представляет собой совокупность трех объектов: точки $O$ начала координат и двух ортогональных единичных векторов $\mathbf{e}_x$ и $\mathbf{e}_y$: $(O, \mathbf{e}_x, \mathbf{e}_y)$. Для двумерной системы координат определено "главное" направление, ось $z$, которому оси $\mathbf{e}_x$ и $\mathbf{e}_y$ всегда перпендикулярны. Совокупность векторов $\mathbf{e}_x$, $\mathbf{e}_y$ и главного направления всегда образуют правую систему координат. Членами-переменными данного класса являются:

    gp_Ax1 axis;
    gp_Dir vydir;
    gp_Dir vxdir;

Конструкторами объектов класса служат:

// Создание неопределенной системы координат
    gp_Ax2();
// Создание системы координат с началом в точке P, главным направлением N
// и направлением x-оси Vx. Ось Vy вычисляется
    gp_Ax2(const gp_Pnt& P,const gp_Dir& N,const gp_Dir& Vx)
// Создание системы координат с началом в точке P и главным направлением V.
// Оси Vx и Vy вычисляются
    gp_Ax2(const gp_Pnt& P,const gp_Dir& V)

Приведем вид процедур задания / опроса значений параметров. Отметим, что при изменении значения какого-либо параметра, значения других могут пересчитываться, как описано в комментариях.

// Задание начала и главного направления, определяемых осью A1.
// X и Y направления пересчитываются. Направление A1 не должно
// совпадать со старым X-направлением.
// Новое X-направление вычисляется следующим образом:
// new "X Direction" = V ^(previous "X Direction" ^ V)
// где V -- направление A1.
    void SetAxis(const gp_Ax1& A1)
// Задание главного направления, определяемого V.
// X и Y направления пересчитываются аналогично SetAxis.
    void SetDirection(const gp_Dir& V)
// Задание начала системы координат
    void SetLocation(const gp_Pnt& P)
// Задание X-направления системы координат. Главное направление не изменяется.
// Если новое X-направление не ортогонально главному, оно модифцируется:
// XDirection = Direction ^ (Vx ^ Direction).
// Новое X-направление не должно быть направлено по главному.
    void SetXDirection(const gp_Dir& Vx)
// Задание Y-направления системы координат. Главное направление не изменяется.
// Если новое Y-направление не ортогонально главному, оно модифцируется:
// YDirection = Direction ^ (<Vy> ^ Direction).
// Новое Y-направление не должно быть направлено по главному.
    void SetYDirection(const gp_Dir& Vy)

// Опрос оси системы координат, т.е. оси главного направления
    gp_Ax1& Axis()
// Опрос главного направления системы координат
    gp_Dir& Direction()
// Опрос начала системы координат
    gp_Pnt& Location()
// Опрос X-направления системы координат
    gp_Dir& XDirection()
// Опрос Y-направления системы координат
    gp_Dir& YDirection()

// Вычисление угла между "главными" направлениями двух систем координат.
// Значение угла лежит в пределах от 0 до PI
    Standard_Real Angle(const gp_Ax2& Other)

В классе имеется также набор процедур, позволяющих выполнять преобразования системы координат (перенос, поворот).