Алгоритм произвольной оси (DXF)

Алгоритм произвольной оси используется в программе AutoCAD для реализации произвольного, но последовательного создания объектных систем координат для всех объектов, в которых используются координаты объекта.

При заданном векторе длины единиц, используемом в качестве оси Z системы координат, алгоритм произвольной оси создает соответствующую ось X для системы координат. Ось Y определяется по правилу правой руки.

Способ состоит в проверке заданной оси Z (также называется вектор нормали). Если она расположена близко к положительной или отрицательной оси Z МСК, необходимо пересечь мировую ось Y заданной осью Z для получения произвольной оси X. Если она расположена далеко, необходимо пересечь ось Z МСК заданной осью Z для получения произвольной оси X. Граница, используемая при принятии решения, выбирается таким образом: она должна быть легко вычислимой и переносимой с одного компьютера на другой. Это достигается путем создания своего рода квадратной "полярной шапки", границы которой составляют соотношение 1/64, которое можно точно задать шестью десятичными дробными цифрами и шестью десятичными двоичными битами.

При запуска алгоритма выполняются следующие действия (считается, что все векторы размещаются в 3D-пространстве в мировой системе координат):

Let the given normal vector be called N.
Let the world Y axis be called Wy, which is always (0,1,0).
Let the world Z axis be called Wz, which is always (0,0,1).

Нам нужны произвольные оси X и Y для нормали N. Назовем их Ax и Ay. N может быть также называться Az (произвольная ось Z), как показано далее:

If (abs (Nx) < 1/64) and (abs (Ny) < 1/64) then
     Ax = Wy X N (where “X” is the cross-product operator).
Otherwise,
     Ax = Wz X N.
Scale Ax to unit length.

Ниже приводится метод получения вектора Ay:

Ay = N X Ax. Scale Ay to unit length.