旋转
许多 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)