如何从另一个线段旋转线段?

时间:2015-10-21 20:03:30

标签: python matplotlib

line

如果我有3个点(P2,P1,P0)和它们之间的角度(alpha)。什么代码会使用角度alpha找到新点Pt + 1?每个点之间的段长度相同。

2 个答案:

答案 0 :(得分:1)

您正在寻找某个点的x和y值。这是两个变量。因此,您需要两个与x和y相关的方程,以便具有可解决的系统。

This link显示了如何找到两个向量之间的角度θ。由于第一个矢量和第二个矢量之间的角度等于第二个矢量和第三个矢量之间的角度,因此您可以将该链接中给出的“theta =”等式的右侧设置为相等于每个矢量对。此时,您可以放下反余弦,只留下等式两边的分数。然后你可以更进一步忽略该公式中的分母,因为它是矢量大小的乘积,你的矢量幅度都是相等的。因此,第一个与x和y相关的方程是:

第一和第二向量的点积等于第二和第三向量的点积。

与x和y相关的第二个等式可以如下:

任何已知向量的大小等于P_0和P_t + 1之间向量的大小。

您可以使用距离公式来设置该等式。

现在你有一个两个方程的系统,只有两个未知值和一些相当简单的代数来解决。我用另一个变量求解了其中一个变量的第一个等式,然后用第二个等式代替它并使用二次方程式。当我转录我的所有代数时,它为一些非常丑陋的代码制作了,但我制作的酷炫的Spirographs(几乎)值得。

只是一个注意事项:由于此方法产生两个解决方案集(因为正方形),您必须决定哪个是您想要的解决方案。在我达到这一点之前它很乏味,所以我决定不详尽地解决这个问题,并且我做了一个粗略的功能来引导我的向量朝着正确的方向发展。祝你好运!

答案 1 :(得分:-1)

您实际上可以忽略角度alpha。有一个向量 v ,当加到P2时,会产生P0。添加到P1的相同向量 v 产生Pt + 1。假设每个点由元组(P0 = (x,y))表示,则变为

v = (P0[0] - P2[0], P0[1] - P2[1])
Pt+1 = (P1[0] + v[0], P1[1] + v[1])