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