如何找到距离AB线段x单位且距离BC线段y单位的点的位置?

3

表现形象

我正在尝试计算点P的坐标,该点距离AB线段x单位,距离BC线段y单位。

编辑: 我正在编写通用解决方案的代码。 作为参数,我有三个点(坐标)A、B和C,还有两个值x和y的距离。


这非常取决于您需要处理的边角情况,以及您的“到线段的距离”是否与“到包含该线段的直线的距离”相同。 - n. m.
1个回答

3

让我们将所有点 A、B、C 按照 (-BX,-BY) 进行平移,将坐标原点设置为 B,新的点分别为 a,0,c,同时我会将距离重命名为 dcda

新的坐标如下:

cy = CY - BY
cx = CX - BX
ay = AY - BY
ax = AX - BX

那么第0c行将具有以下方程式

(-cy * x + cx * y) / Sqrt(cx*cx +cy*cy) = 0

0a 行将有以下方程式:

(-ay * x + ax * y) / Sqrt(ax*ax +ay*ay) = 0

我们定义 lc = Sqrt(cx*cx +cy*cy)la = Sqrt(ax*ax +ay*ay) (即 BCBA 两线段的长度)

如果点 p=(px, py) 离直线 0c 的距离是 dc,离直线 0a 的距离是 da,那么有:

Abs(-cy * px + cx * py) = dc * lc
Abs(-ay * px + ax * py) = da * la

如果你的点总是形成逆时针顺序的BC, BP, BA射线,那么你可以仅使用这个符号组合并找到单一解决方案:
-cy * px + cx * py = dc * lc
-ay * px + ax * py = - da * la

解这个线性系统以求得pxpy,最后通过BXBY将坐标移回。

PX = px + BX
PY = py + BY

附注:当ABC角度为180时,对于da<>dc不存在解,而对于da=dc有无限解。


1
注意:对于角ABC = 180,如果两个距离不相等,则没有解决方案。如果两个距离相等,则有无限解决方案(在与ABC平行的两条线上任何距离的点)。 - Jerry Coffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接