找出一个点是否在给定宽度的线内

时间:2015-10-28 16:56:25

标签: math

如果我需要做什么,我在数学方面有点迷失。

我有3分:A点,B点,C点。

我需要找出点C是否在从A点到B点的线段上。但是......需要注意的是,我同时需要使线“从A点到B点更宽”。

我猜我需要先创建一个围绕A-> B的边界框?然后检查我是否在边界框内?

如何创建该框..

A和B在网格上可以是负数或正数,并且框的“距离”也可以改变。

我希望这张照片更好地说明了这一点。距离是给定的总数,所以一半是1个方向,另一半是。

enter image description here

即使我可以获得这个盒子中的4个点,我也可以进行简单的检查以查看C是否在其中。

3 个答案:

答案 0 :(得分:1)

你必须(带有其他点名的网页图片P0 = A,P1 = B,P = C)

enter image description here

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}}

,则为true

答案 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)