让我们将所有点 A、B、C
按照 (-BX,-BY)
进行平移,将坐标原点设置为 B
,新的点分别为 a,0,c
,同时我会将距离重命名为 dc
和 da
。
新的坐标如下:
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)
(即 BC
和 BA
两线段的长度)
如果点 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
解这个线性系统以求得px
和py
,最后通过BX
和BY
将坐标移回。
PX = px + BX
PY = py + BY
附注:当ABC角度为180
时,对于da<>dc
不存在解,而对于da=dc
有无限解。