我正在使用一些代码,我发现它可以测试两个三角形的交叉点。我遇到问题的代码部分是:
/*tr_tri_intersect3D - C1 is a vertex of triangle A. P1,P2 are the two edges originating from this vertex.
D1 is a vertex of triangle B. P1,P2 are the two edges originating from this vertex.
Returns zero for disjoint triangles and non-zero for intersection.*/
int tr_tri_intersect3D (double *C1, double *P1, double *P2,
double *D1, double *Q1, double *Q2);
我不明白的是,如果我有两个三角形的三个顶点,我需要做些什么来产生这个函数的输入?
完整的源代码可以在以下网址找到:
The source code had a test function, it was:
for (i = 0; i<10000; i++){
for (j = 0; j<3; j++){
for (k = 0; k<3; k++){
PS[i][j][k] = drand48();
QS[i][j][k] = drand48();
}
}
for (j = 0; j<2; j++){
for (k = 0; k<3; k++){
EPS[i][j][k] = PS[i][j + 1][k] - PS[i][0][k];
EQS[i][j][k] = QS[i][j + 1][k] - PS[i][0][k];
}
}
}
double sum = 0;
int t0 = clock();
int sums[100] = { 0 };
for (j = 0; j<1000; j++)
for (i = 0; i<10000; i++){
int res = tr_tri_intersect3D(PS[i][0], EPS[i][0], EPS[i][1],
QS[j][0], EQS[j][0], EQS[j][1]);
sums[res]++;
}
如果有帮助的话。
答案 0 :(得分:1)
从示例代码看,边缘的含义似乎是从起始顶点到结束顶点的向量。 在具有三个顶点C1,C2,C3的三角形的情况下,两个输入边缘将是P1 = C2-C1,P2 = C3-C1
答案 1 :(得分:0)
读取测试代码,看起来C和D是两个[3] [3] 9个双精度数组,分别是1,2和3点以及它们的3D x,y,z坐标。
P1和P2是点2和3距离三角形C中的点1的x,y,z距离,Q1和Q2是点1的点2和3的x,y,z距离。 (编辑:byebyebryan说它更好,这是从第1点到第2点和第3点的x,y,z向量)。这两个都是[3]双精度数组(基本上是边界框信息)。
不知道为什么Ps和Qs不在函数内部计算,除非vars也用于以某种方式保存返回值。