旋转

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

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

显示两个坐标空间的 图;每个位置都有一个余切,并且具有不同的旋转

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

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

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

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

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

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

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

生成旋转的 2-by-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' 的 关系图,以及两个三角形

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

x = h * cos A1 

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

y = h * sin A1 

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

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 旋转的给定点的旋转算法,可以通过替换每个匹配项 (h * cos A1) 的 x,以及为每个匹配项 (h * sin A1) 替换 y 来获取。

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