我必须使用专有的图形引擎来画一条线。我可以按原点(P1)旋转整个图形。我想要的是围绕它的中心点(M)旋转它。因此基本上看起来像是绿线(L_correct而不是L_wrong)。
我认为,应该可以通过将其从P1移到P2来对其进行校正。但是我不知道可以使用什么公式来确定距离。它可能必须涉及角度,角度和高度...谁能给我提示吗?


#1 楼

技巧是移动整个对象,以使要旋转的点位于中心。然后旋转,然后在计数器移动之后将其指向原来的位置。

实际上,这并不是什么招数,因此,几乎所有图形引擎都以这种方式工作。在许多情况下,它只是被抽象掉了。大多数情况下,您会看到它以矩阵表示法完成,如下所示:

$$ T ^ {-1} RT $$

T在哪里实现从世界到枢纽的转变, R是旋转矩阵。由于可以通过这种方式轻松打包,因此您最终获得了一个称为绕枢轴点旋转的函数。这通常是绘图API允许使用转换矩阵的原因。


图像1:绕枢轴点旋转,图像源可用于研究。以RTL读取顺序的子图像:原始,逆变换,逆向旋转,逆向旋转和向后移动。

#2 楼

我不确定自己的计算是否正确,但是在我的书写纸上似乎可以解决。

P1和P2围绕M围成一个圆。

这允许我们仅通过取圆的半径(是线长的一半)并构造两个矩形三角形来测量两个点的距离。此处接受的答案提供了此构造的草图。
因此,鉴于您的旋转角度为$ \ gamma $且直线为$ l $长,因此得出:

$ x = 2 * sin (\ frac {\ gamma} {2})* \ frac {l} {2} $

线M到P1和M到P2形成一个等腰三角形,第三边是线段在P1和P2之间。

已知M点的角度是旋转角度$ \ gamma $,因此该三角形中其余的两个角度由

$ \给出。 alpha = \ frac {180-\ gamma} {2} $

因此错误的线与所需的平移向量之间的夹角只是

$ \ beta = \ alpha + \ gamma $

因此,现在旋转从错误的线开始的单位矢量。

将其围绕P1旋转$ \ beta $并将其缩放为长度x。

产生从P1到P2的翻译向量。线的旋转确实应该正确。

评论


$ \ begingroup $
尽管总的来说,仅使用他的回答中解释的joojaa结构要容易得多。
$ \ endgroup $
–龙船
16-2-16在23:27