问题描述
我有两条线的两个点A(x1,y1)和B(x2,y2),我需要检查第三个点是否说C(x3,y3)落在直线两侧的1米范围内线。 因此,当AB形成一条水平线时,我们检查该线上方1米和下方1米的区域。如果线是垂直的,则第三个点应位于线的左侧或右侧,距AB的范围为0至10米。 (C点可能在AB线上或10米范围内)
如果我只想检查直线,可以使用斜率截距或点截距,但是我需要在形成的直线周围留出1米的缓冲区。请帮忙。
黑色文字显示的c点在区域内,红色点在允许的区域外。
解决方法
由(X1,Y1)和(X2,Y2)点与(X3,Y3)点形成的线之间的最小距离是:
距离= abs((Y3-Y1)*(X2-X1)-(Y2-Y1)*(X3-X1))
您可以检查该距离是否小于1米。
, MrPontes非常接近事实,却忘记了归一化因子。我正在提供另一个使用复数的解决方案。让三点由复数Za
,Zb
和Zc
给出。
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的纵坐标。