1

我有一条从 ( a , b ) 到 ( x , y ) 的线,我想画一条从 ( x , y ) 开始的线,长度为 ℓ,与原线形成 θ 角。

如何计算这条新线的端点坐标?看图:

4

2 回答 2

2

好的,所以经过大量涂鸦后,我想出了这个:

虚线表示平行于 x 轴和 y 轴的线。

m = x - a

n = y - b

α = tan -1 (n / m)

β = α - θ

p = ℓ cos β

q = ℓ sin β

c = x + p

d = y + q

于 2012-12-05T23:18:47.203 回答
2

对于这种事情,使用矢量代数几乎总是更简单,而不是笛卡尔坐标。让我们从标记点开始:

在此处输入图像描述

令 R(θ) 为逆时针旋转 θ 弧度的矩阵:

然后计算:

v = B - A(从AB的向量)

= v / | v | ( v方向的单位向量)

ŵ = R(−θ) v̂ ( BC方向的单位向量;你的旋转是顺时针的,所以我们这里需要R(−θ),而不是R(θ))

w = ℓ ŵ(长度为 ℓ 在BC方向上的向量)

C = B + w

这种方法避免了计算反正切的需要,这需要一些小心(如果天真地完成,当B垂直高于或低于A时会遇到麻烦;但大多数语言都有atan2处理这种情况的函数)。

在任何带有向量库的合理编程语言中,您应该能够将其编写为单行代码,可能像这样:

C = B + (B - A).unit().rotate(-theta) * l
于 2012-12-06T15:13:42.290 回答