Геометрические примитивы
Система координат
Продолжение 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)
В классе имеется также набор процедур, позволяющих выполнять преобразования системы координат (перенос, поворот).