用于生成三角形边的代码

时间:2014-11-30 04:45:47

标签: c++ geometry trigonometry

我正在使用一些代码,我发现它可以测试两个三角形的交叉点。我遇到问题的代码部分是:

/*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);

我不明白的是,如果我有两个三角形的三个顶点,我需要做些什么来产生这个函数的输入?

完整的源代码可以在以下网址找到:

Triangle Triangle Code

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]++;
        }

如果有帮助的话。

2 个答案:

答案 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也用于以某种方式保存返回值。