首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

vtk学习札记 - 判断三角形相交

2012-12-21 
vtk学习笔记 --- 判断三角形相交在使用三角网连接矿体的时候,需要判断当前连接的三角形和已经连接的三角形

vtk学习笔记 --- 判断三角形相交

在使用三角网连接矿体的时候,需要判断当前连接的三角形和已经连接的三角形是否相交,所以,就需要进行三角形相交判断。

?

看了一些算法的文章,两个三角形相交的判断规则大体如下:

?

假设这两个三角形为A(a1,a2,a3),B(b1,b2,b3),三角形A所在的平面为PA,法向量为NA,三角形B所在的平面为PB,法向量为NB。

?

1、将三角形A的所有顶点投影到平面PB上,投影得到的点为proja1,proja2,proja3

?

2、计算三角形A的所有顶点到平面PB的有符号距离:

|a1| = |a1-proja1|

|a2| = |a2-proja2|

|a3| = |a3-proja3|

其中,符号取决于 顶点与投影点构成的向量与平面PB法向量的方向是否一致,如果一致,则大于0,不一致则小于0

?

3、根据有符号距离来判断三角形相交情况:

? ? a、如果三个有符号距离的符号一致(都大于0或者都小于0),说明两个三角形不相交

? ? b、如果一个符号距离为0,另外两个符号距离乘积大于0,则说明两个三角形相交于一个顶点

? ? c、 如果一个符号距离为0,另外两个符号距离乘积小于0,则说明符号距离为0的顶点位于平面PB内,而另外两个顶点位于平面PB两侧,需要计算交线来判断是否相交。

? ? d、如果一个符号距离和另外两个符号距离的符号相反,说明一个顶点位于平面PB的一侧,两外两个顶点位于平面PB的另外一侧,需要计算交线来判断是否相交。

?

4、根据上面的符号距离,来计算三角形A与平面PB的交点,然后得到两个三角形与对应平面的交线,最后通过判断交线是否相交或者重合来判断三角形是否相交。

?

具体的C++代码如下:

?

?

?

?

备注:最后在判断两个三角形的交线是否相交时,采用的是判断两个交线之间的距离,如果距离为0,则说明相交,隐约的觉得这种办法不够好,但一时也找不到更好的判断方法,后面继续完善!

热点排行