首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三角形内的顶点-碰撞检测

三角形内的顶点-碰撞检测
EN

Stack Overflow用户
提问于 2011-01-11 20:59:07
回答 3查看 2.2K关注 0票数 0

我正在尝试检查顶点是否在三角形内,但我在为3D环境开发CCW函数时遇到了问题。

对于2D环境,CCW函数如下所示

代码语言:javascript
复制
//CCW calculates the cross produt


double CCW ( point A  , point B , point C ) {

return (B.x-A.x)  * (C.y-A.y) - (B.y-A.y) * (C.x-A.x);

}

//The other part is designed to work on 3D

typedef struct{

   double x;
   double y;
   double z;

}Point;

int inTriangle(point A, point B, point C, point D){

   Point E;

   E.x = (A.x + B.x + C.x)/3;

   E.y = (A.y + B.y + C.y)/3;

   E.z = (A.z + B.z + C.z)/3;


return ( CCW(A,B,D) * CCW (A,B,E) > 0 &&
         CCW(B,C,D) * CCW(B,C,E) > 0 &&
         CCW(A,C,D) * CCW(A,C,E) );

}
EN

回答 3

Stack Overflow用户

发布于 2011-01-11 22:32:18

如果你想知道顶点是否直接位于三角形的平面和边界内(即,在三角形的表面上),你可以分别检查这两件事。首先检查顶点是否位于三角形的平面内。然后,您应该能够将三角形和顶点投影到2D中,并使用2D方法。

它还具有消除大量顶点的优点,因为它们不在三角形的平面上,这是一种快速计算。

票数 1
EN

Stack Overflow用户

发布于 2011-01-11 22:04:26

如果该点在三角形的平面上,则可以使用here所述的重心方法。

票数 0
EN

Stack Overflow用户

发布于 2011-01-12 09:02:11

要检查该点是否在三角形的平面上,可以编写三角形的平面方程。用3个点来写很简单,而且它是线性的,所以计算会非常快。

要理解如何编写公式检查http://en.wikipedia.org/wiki/Plane_(geometry,它很简单。

要确定该点是否在平面内,只需简单地检查它是否满足普朗斯方程,就足以保证精度

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4657864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档