要找到从点到线段的距离,您首先要通过选择任意点
P1并在线
P2上找到从点到线的距离(使用端点可能是明智的选择)。然后将向量从
P1您的位置带到
P0,找出点积
(P2-P1). (P0 - P1)在哪里
.。将该值除以
||P2-P1||^2得到一个值
r。
现在,如果您选择
P1和
P2作为点,则只需检查是否
r在0和1之间。如果
r
大于1,则
P2是最近的点,因此您的距离为
||P0-P2||。如果
r小于0,则
P1是最接近的点,因此您的距离为
||P0-P1||。
如果为
0<r<1,则您的距离为
sqrt(||P0-P1||^2 - (r * ||P2-P1||)^2)
伪代码如下:
for p1, p2 in vertices: var r = dotProduct(vector(p2 - p1), vector(x - p1)) //x is the point you're looking for r /= (magnitude(vector(p2 - p1)) ** 2) if r < 0: var dist = magnitude(vector(x - p1)) else if r > 1: dist = magnitude(vector(p2 - x)) else: dist = sqrt(magnitude(vector(x - p1)) ^ 2 - (r * magnitude(vector(p2-p1))) ^ 2) minDist = min(dist,minDist)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)