让我们将所有点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
附:在额外的情况下angle ABC=180 系统没有da<>dc 的解决方案或da=dc 的无限数量的解决方案