旋转并使两条线平行

时间:2013-02-08 19:50:32

标签: c# rotation geometry line aforge


我有两个带有点的线段 Line1 =(x1,y1),(x2,y2)---较小的
Line2 =(x3,y3),(x4,y4)---更大

如何使Line1(较小)旋转并使其与Line2平行(较大) 使用任何一个

1)(x1,y1)作为固定旋转点或
2)(x2,y2)作为固定旋转点或
3)中心点作为固定旋转点

我正在使用C#.NET。 和Aforge.NET库。

center point as fixed point of rotation

由于

1 个答案:

答案 0 :(得分:1)

下面描述的所有操作都可以表示为affine transformation矩阵。

  1. 将所需的旋转中心移动到原点。
  2. 计算旋转角度或直接计算旋转矩阵。见下文。
  3. 应用该旋转,作为围绕原点的旋转。
  4. 应用反向平移将旋转中心移回原位。
  5. 您可以将这三个矩阵相乘以获得整个操作的单个矩阵。您甚至可以使用笔和纸进行此操作,并将结果硬编码到您的应用程序中。

    关于如何计算rotation matrix:跨越线的两个向量的点积除以这些向量的长度,是cos(φ),即它们之间角度的余弦。正弦是±sqrt(1-cos(φ)²)。您只需要在旋转矩阵中使用这两个数字,因此无需在性能方面实际计算角度。然而,获得正确的标记可能会非常棘手,因此就简单编程而言,通过两次调用atan2,差异以及随后调用sincos可能会更好。