明确地来说,一个三角形或多边形是顺时针还是逆时针只是针对二维空间而言。空间三角形不能直接说是顺时针还是逆时针,必须是从某个方向看下去来进行判定,比如往z轴负方向看,该空间三角形是顺时针,但往z轴正方向看该空间三角形又是逆时针。那么,到底应该采用什么样的方法来判定一个空间三角形的顺逆时针呢?
最近查阅了很多资料,发现关于空间三角形顺逆时针判断方法相关的资料是少之又少,仅有的几个博客提供的代码经测试还都是错的,比如以下两个博客:http://blog.csdn.net/jet_lee01/article/details/40403895;http://blog.csdn.net/swety_gxy/article/details/70782908。
通过查阅书籍《计算机图形学几何工具算法详解》9.3节9.3.5一致次序找到了一种可行的方法,并且经测试是正确的:
1.先介绍空间平面方程的一般形式:
假设一个空间三角形的三个顶点组成为V0,V1,V2;法向量求法:n=(V1-V0)叉乘(V2-V0);d=-n点积V0(这里n代表法向量,已省略箭头)。
2.一致次序判断:
一
3.代码:(顺时针输出0,逆时针输出1)
ofstream out;
out.open(fileName+"最开始顺逆判断结果.txt");
double temp;Vector3D normal;
for (int j=0;j<tempTri.size();++j)
{
//计算平面的法向量
normal=tempTri[j].GetTriangleNormal();
//计算每一个三角形所在的平面方程式
double mD=-normal.DotProduct(Vector3D(tempTri[j].p[0]));//得到平面方程的另外一个参数