如果我需要做什么,我在数学方面有点迷失。
我有3分:A点,B点,C点。
我需要找出点C是否在从A点到B点的线段上。但是......需要注意的是,我同时需要使线“从A点到B点更宽”。
我猜我需要先创建一个围绕A-> B的边界框?然后检查我是否在边界框内?
如何创建该框..
A和B在网格上可以是负数或正数,并且框的“距离”也可以改变。
我希望这张照片更好地说明了这一点。距离是给定的总数,所以一半是1个方向,另一半是。
即使我可以获得这个盒子中的4个点,我也可以进行简单的检查以查看C是否在其中。
答案 0 :(得分:1)
你必须(带有其他点名的网页图片P0 = A,P1 = B,P = C):
1)使C正交投影到AB线(点D)
2)找到距离CD并检查它是否小于半宽
3)检查D位于A和B之间(段内)
for 2:distance uAB = AB/|AB|
- AC矢量和单位方向矢量的交叉积的范数DotProduct(AC, AB) >= 0
for 3:如果DotProduct(BC, BA) >= 0
和{{1}}
答案 1 :(得分:0)
这里有所有必要的公式https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line
首先你找到最短距离顺便点C和线,并检查它是否等于宽度/ 2。然后你找到点D的坐标 - 最接近线上的C点,并检查这个点是否在A和B之间。可以通过检查距离(A,D)+距离(B,D)==距离来完成。 A,B)
答案 2 :(得分:0)
定义u = normalize(b - a)
和v = (-u.y, u.x)
。
您的观点c
位于宽度为a
的{{1}}到b
的线段内,当且仅当以下两个都成立时:
w
0 <= dot(c - a, u) <= length(b - a)