我看到很多帖子描述了如何找到点在外面或内部。但我想知道是否有办法知道这个点是否在三角形的边缘。
等式应该有4个参数{{1}},我试图发现的点位于边缘,另外三个点创建三角形
当我看到边缘时,我的意思是在任何一个线段上,给定一个“边缘”的三角形是任何创建它的线
答案 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