旋转

许多 CAD 应用程序提供旋转工作区中绘制的对象的功能。 包含旋转功能的应用程序使用 SetWorldTransform 函数将相应的世界空间设置为页面空间转换。 此函数接收指向包含相应值的 XFORM 结构的指针。 XFORM 的 eM11、eM12、eM21 和 eM22 成员分别指定旋转角度的余弦、正弦、负正弦和余弦。

发生 旋转 时,将相对于坐标空间原点旋转构成对象的点。 下图显示了一个 20 x 20 单位的矩形在从世界坐标空间复制到页面坐标空间时旋转 30 度。

显示两个坐标空间的插图;每个都有一个位于不同位置且具有不同旋转的 rectange

在上图中,矩形中的每个点相对于坐标空间原点旋转了 30 度。

以下算法计算 (x,y ) 点的新 x 坐标 (x ') ,该点相对于坐标空间原点按角度 A 旋转。

x' = (x * cos A) - (y * sin A) 

以下算法计算 (x,y ) 点的 y 坐标 (y ') ,该点由角度 A 相对于原点旋转。

y' = (x * sin A) + (y * cos A) 

两个旋转转换可以在 2 乘 2 矩阵中组合,如下所示。

|x' y'| == |x y| * | cos A   sin A| 
                   |-sin A   cos A| 

生成旋转的 2 乘 2 矩阵包含以下值。

| .8660    .5000| 
|-.5000    .8660| 

旋转算法派生

旋转算法基于三角加法定理,该定理指出,A1 和 A2 ) 两个 (角度之和的三角函数可以用两个角度的三角函数来表示。

sin(A1 + A2) = (sin A1 * cos A2) + (cos A1 * sin A2) 
cos(A1 + A2) = (cos A1 * cos A2) - (sin A1 * sin A2) 

下图显示了一个点 p 逆时针旋转到新位置 p'。 此外,它还显示两个三角形,这些三角形由一条从坐标空间原点绘制到每个点的线条和一条从每个点通过 x 轴绘制的线条构成。

显示原点、p 和 p'以及两个三角形的示意图

使用三角法,可以通过将低音 h 的长度乘以 A1 的余弦值来获取点 p 的 x 坐标。

x = h * cos A1 

可以通过将低音 h 的长度乘以 A1 的正弦值来获取 p 点的 y 坐标。

y = h * sin A1 

同样,可以通过将低音 h 的长度乘以 (A1 +A2 ) 的余弦值来获取 p' 点的 x 坐标。

x' = h * cos (A1 + A2) 

最后,可以通过将下限 h 的长度乘以 (A1 +A2 ) 的正弦值来获取点 p' 的 y 坐标。

y' = h * sin (A1 + A2) 

使用加法定理,前面的算法将变为以下内容:

x' = (h * cos A1 * cos A2) - (h * sin A1 * sin A2) 
y' = (h * cos A1 * sin A2) + (h * sin A1 * cos A2) 

对于按角度 A2 旋转的给定点,可以通过将 x 替换为 (h * cos A1 ) ,并将 y 替换为 (h * sin A1 ) 每次出现的 y 来获得。

x' = (x * cos A2) - (y * sin A2) 
y' = (x * sin A2) + (y * cos A2)