// ************************************************************ // // // Progama de Testes para cálculo de interseção entre // triângulos // // // ************************************************************ #include #define X 0 #define Y 1 #define Z 2 int HaInterseccao(float V0[3],float V1[3],float V2[3], float U0[3],float U1[3],float U2[3]); // ************************************************************ // TestaIntersecTri // esta função recebe como parâmetros dois triângulos e // determina se este se cruzam ou não. // Retorno: // 0: não há intersecção entre os triângulos // 1: há intersecção entre os triângulos // // ************************************************************ int TestaIntersecTri (float Triangulo_1[3][3], float Triangulo_2[3][3]) { return HaInterseccao( Triangulo_1[0], Triangulo_1[1], Triangulo_1[2], Triangulo_2[0], Triangulo_2[1], Triangulo_2[2]); } // Triangulo 1 float Tri1[3][3] = { 10, 0, 10, // Vértice 0 20, 20, 10, // Vértice 1 30, 0, 10 }; // Vértice 2 // Triangulo 2 float Tri2[3][3] = { 20, 0, 0, // Vértice 0 20, 20, 10, // Vértice 1 20, 0, 20 }; // Vértice 2 // ************************************************************ // // // // ************************************************************ void ImprimeTri(float Tri[3][3]) { for(int i=0;i<3;i++) { printf("(%6.2f, %6.2f, %6.2f)\n", Tri[i][X], Tri[i][Y], Tri[i][Z]); } } // ************************************************************ // // // // ************************************************************ void main() { printf("Triangulo 1:\n"); ImprimeTri(Tri1); printf("Triangulo 2:\n"); ImprimeTri(Tri2); if (TestaIntersecTri(Tri1, Tri2)) printf("Há interseccão\n"); else printf("Não há interseccão\n"); printf("\n"); // efetua uma translação no polígono Tri1[0][X] += 11; Tri1[1][X] += 11; Tri1[2][X] += 11; printf("Triangulo 1:\n"); ImprimeTri(Tri1); printf("Triangulo 2:\n"); ImprimeTri(Tri2); if (TestaIntersecTri(Tri1, Tri2)) printf("Há interseccão\n"); else printf("Não há interseccão\n"); }