我需要一种最快的方法来在2D中找到三角形(而不是边缘)内的任何点。有什么帮助吗?
答案 0 :(得分:5)
三个顶点(质心)的“平均值”是三角形内的一个点,可能与其他任何一个一样快。
它只位于退化情况下的边缘,其中顶点是共线的。在这种情况下,三角形中的每个点都位于边缘,因此没有解决方案。
答案 1 :(得分:2)
如果你的三角形表示为点,你将不得不考虑每个坐标,所以Steve Jessop的答案几乎是最优的。
请注意,您实际需要做的就是从一个点开始,然后向有限的两个点开始。这是平均完成的,但是以非常具体的方式。
加法很快。根据平台和编译器的不同,划分可能会很慢。
例如,在现代ARM内核上,我会在平均值上选择此版本:
xm = (x0 + (x1 + x2) / 2) / 2
ym = (y0 + (y1 + y2) / 2) / 2
如果变量是整数,编译器应该优化分区到位移位,如果调度正确,则在ARM中基本上是免费的。如果变量是浮点数或双精度数,则编译器应将它们优化为简单的指数递减。已知浮点除法相对较慢。
最终,测试并看到。除非您正在进行相对较低级别的代码优化,否则您可能不会看到差异。另一方面,如果你在一个紧密的内循环中使用它,你可能会。
提供一些关于其工作原理的直觉:首先,我们找到由(x1, y1)
和(x2, y2)
形成的线段的中点。然后我们找到由 点和(x0, y0)
形成的线段之间的中点。如果你绘制一个三角形的图表并执行此操作,则立即清楚地知道这是有效的。
答案 2 :(得分:1)
顶点A,B,C
载体
AB = B-A
AC = C-A
P = A + t * AB + u * AC
t,u - 范围[0..1]中的任何数字(随机?)和t + u <= 1
答案 3 :(得分:0)
或:您可以先计算三角形的表面。 然后你做第二次计算,你的点在三个其他三角形中划分三角形。如果这三个子三角形的表面比较大,那么你的点就在三角形区域之外。看看我的意思?