我有一个由网格和三角形定义的三维网格。我也有网格的法线。我想计算网格的面积,假设它总是封闭的。我发现一个有趣的实现3D体积的计算中this question,而且我申请它在C代码构建一个由R.此调用的函数是代码:计算三维网格的表面积
double SignedVolumeOfTriangle(double p1X, double p1Y, double p1Z,
double p2X, double p2Y, double p2Z, double p3X, double p3Y, double p3Z) {
double v321 = p3X*p2Y*p1Z;
double v231 = p2X*p3Y*p1Z;
double v312 = p3X*p1Y*p2Z;
double v132 = p1X*p3Y*p2Z;
double v213 = p2X*p1Y*p3Z;
double v123 = p1X*p2Y*p3Z;
return (double)(1.0/6.0)*(-v321 + v231 + v312 - v132 - v213 + v123);
}
void MeshVolume(double *X, double *Y, double *Z, int *numT, int *V1, int *V2, int *V3, double *Volume) {
int n;
*Volume=0;
for (n=0; n<*numT; n++) {
*Volume = *Volume + SignedVolumeOfTriangle(X[V1[n]], Y[V1[n]], Z[V1[n]], X[V2[n]], Y[V2[n]], Z[V2[n]], X[V3[n]], Y[V3[n]], Z[V3[n]]);
}
*Volume = fabs(*Volume);
}
既不是问题也不在文章中我找到了计算网格面积的算法。有没有人可以帮助我?
你是否咨询了其他人的消息?比如任何一种“图书馆”...... – alk 2014-10-11 08:36:09
不,我没有。但是我想以最有效的方式解决问题,并且可能不使用外部库。 – 2014-10-11 08:43:51
;-)有了“*图书馆*”,我的意思是他们收集知识的地方之一,例如在过去堆积书籍...... – alk 2014-10-11 08:50:15