给定一条线,检查点Px,y是否落在该线两侧的1米范围内

问题描述

我有两条线的两个点A(x1,y1)和B(x2,y2),我需要检查第三个点是否说C(x3,y3)落在直线两侧的1米范围内线。 因此,当AB形成一条水平线时,我们检查该线上方1米和下方1米的区域。如果线是垂直的,则第三个点应位于线的左侧或右侧,距AB的范围为0至10米。 (C点可能在AB线上或10米范围内)

如果我只想检查直线,可以使用斜率截距或点截距,但是我需要在形成的直线周围留出1米的缓冲区。请帮忙。

黑色文字显示

c点在区域内,红色点在允许的区域外。

enter image description here

解决方法

由(X1,Y1)和(X2,Y2)点与(X3,Y3)点形成的线之间的最小距离是:

距离= abs((Y3-Y1)*(X2-X1)-(Y2-Y1)*(X3-X1))

您可以检查该距离是否小于1米。

,

MrPontes非常接近事实,却忘记了归一化因子。我正在提供另一个使用复数的解决方案。让三点由复数ZaZbZc给出。

C到AB线的距离的公式是

D = Im((Zc - Za) / (Zb - Za)) |Zb - Za|

Im表示虚部)。该距离在一侧为正,而在另一侧为负,则可以取绝对值。


说明:

如果我们从这些点中减去Za,则A到达原点,其他跟随。

如果我们现在除以Zb - Za,B绕原点旋转并按1/|Zb - Za|缩放到点1。我们撤消缩放以获得纯旋转。

现在

(Zc - Za) / (Zb - Za) |Zb - Za|

将C旋转,将AB带到水平轴X,并且请求的距离是变换后的C的纵坐标。