我有一行( a , b )到( x , y ),我想画一条从( x , y )开始的线,长度为l,与原线成一个θ角。
如何计算此新线路端点的坐标?见图:
答案 0 :(得分:2)
好的,经过大量的涂鸦后,我想出了这个:
虚线表示平行于x轴和y轴的线。
m = x - a
n = y - b
α= tan -1 (n / m)
β=α - θ
p =ℓcosβ
q =ℓsinβ
c = x + p
d = y + q
答案 1 :(得分:2)
使用矢量代数来做这种事情几乎总是比较简单,而不是笛卡尔坐标。让我们从标记点开始:
设R(θ)为逆时针旋转θ弧度的矩阵:
然后计算:
v = B - A (从 A 到 B 的矢量) )
v = v / | v | ( v 方向的单位向量)
ŵ = R(-θ) v ( BC 方向的单位矢量;旋转顺时针< / em>,所以我们这里需要R(-θ),而不是R(θ))
w =ℓŵ( BC 方向的长度为l的向量)
C = B + w
这种方法避免了计算反正切的需要,这需要一些小心(如果天真地完成,当 B 垂直高于或低于 A 时会遇到麻烦;但大多数语言都有像atan2
这样的函数来处理这种情况。)
在任何带有矢量库的合理编程语言中,您都应该能够将其写成单行,也许是这样的:
C = B + (B - A).unit().rotate(-theta) * l