高级 DXF 问题   
任意轴算法

AutoCAD 内部使用任意轴算法为所有使用对象坐标的图元生成任意但一致的对象坐标系。

假定一个作为坐标系的 Z 轴的单位长度矢量,任意轴算法将为坐标系生成相应的 X 轴。Y 轴可以通过应用右手定则来确定。

可以使用该方法检查给定的 Z 轴(也称为普通矢量)。如果它距离正向或负向世界 Z 轴很近,可以用给定的 Z 轴跨越世界 Y 轴到达任意 X 轴。如果不是很近,可以用给定的 Z 轴跨越世界 Z 轴到达任意 X 轴。所选的边界应该既便于计算又能在不同计算机上使用。为此,可以通过安装一种“方形”环形封口来实现,环形封口的边界是 1/64,是用六位十进制分数和六位二进制分数精确指定的。

算法如下(假定所有矢量都在三维空间中并在世界坐标系中指定):

假定普通矢量为 N。
假定世界 Y 轴为 Wy,它总是位于点 (0,1,0)。
假定世界 Z 轴为 Wz,它总是位于点 (0,0,1)。

现在我们寻找任意 XY 轴以便与普通 N 匹配。它们将被称为 AxAyN 也可以按如下方式称为 Az(任意 Z 轴):

如果 (abs (Nx) < 1/64) 且 (abs (Ny) < 1/64)   则
     Ax = Wy X N  (其中“X”是叉积运算符)。
否则,
     Ax = Wz X N。
将 Ax 缩放到单位长度。

获得 Ay 矢量的方法如下:

Ay = N X Ax。  将 Ay 缩放到单位长度。

   评论?