2013-02-08 28 views
0


我与点的两条线段
线路1 =(X1,Y1),(X2,Y2)---较小
线路2 =(X3,Y3),(X4, Y4)---更大
旋转,使平行的两行

我怎样才能使线路1(较小的)旋转,并使其平行于线2(放大) 使用任一

1)(X1,Y1)作为固定点2)(x2,y2)作为固定的旋转点或
3)中心点作为固定的旋转点

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

center point as fixed point of rotation

由于

+3

将它们作为向量处理,只需从这三点中的任意一点开始绘制一个新的向量,其大小为'l1',方向为'l2'。 – Blender 2013-02-08 19:55:33

+0

这是比编程更数学:我建议在math.stackexchange.com重新发布这个。 – BTownTKD 2013-02-08 20:18:36

+0

@BTownTKD:请注意[多个SE网站之间的交叉邮件令人f然心动](http://meta.stackexchange.com/问题/ 64068)。您应该首先尝试一个网站,如果您没有得到满意的回复,请主持人**将该问题迁移到其他网站。 – 2013-02-10 17:55:39

回答

1

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

  1. 将所需的旋转中心移动到原点。
  2. 计算旋转角度或直接计算旋转矩阵。见下文。
  3. 将该旋转应用为围绕原点的旋转。
  4. 应用反转换将旋转中心移回其原始位置。

您可以将这三个矩阵相乘以获得整个操作的单个矩阵。你甚至可以用笔和纸做,并将结果硬编码到你的应用程序中。

至于如何计算rotation matrix:跨越线条的两个向量的点积除以这些向量的长度为cos(φ),即它们之间角度的余弦。正弦为±sqrt(1-cos(φ)2)。你只需要旋转矩阵中的这两个数字,所以不需要根据性能实际计算角度。但是,获得标志可能会非常棘手,因此就易于编程而言,您可能更愿意拨打atan2的两个电话,以及后续拨打sincos