如何确定点是否位于2D三角形的边缘/边界?

时间:2016-10-07 02:49:50

标签: algorithm math geometry

我看到很多帖子描述了如何找到点在外面或内部。但我想知道是否有办法知道这个点是否在三角形的边缘。

等式应该有4个参数{{1}},我试图发现的点位于边缘,另外三个点创建三角形

当我看到边缘时,我的意思是在任何一个线段上,给定一个“边缘”的三角形是任何创建它的线

2 个答案:

答案 0 :(得分:2)

边缘 是什么意思?

即使您的终点和您选择的点是整数,线的方程也不是。没有必要在线上达到无限精度(除了明显的情况)

说这个点在线的某个小距离内真的是有道理的。有关公式,请参阅Shortest distance between a point and a line segment

答案 1 :(得分:2)

使用链接答案中的函数计算相对于三角形边的点的位置时:

float sign (fPoint p1, fPoint p2, fPoint p3)
{
    return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);
}

然后零符号值表示点恰好位于边缘

(更确切地说 - 在包含边缘的线上。另外两条边的标志显示点是否在顶点之间)

如果您需要一些容差级别来补偿浮点错误,只需比较绝对值" sign"三角区域的值。

DoubledTriangleArea = Abs(sign(v1, v2, v3)
if (Abs(sign(p, v1, v2)) / DoubledTriangleArea < SomeSmallValue)
    p lies near v1-v2 edge