Advertisement
Guest User

Untitled

a guest
Apr 21st, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.72 KB | None | 0 0
  1. double calculCoordButterFly(int A, int B, int C, int D, int E, int F, int G, int H) {
  2.  
  3.   return ((TabVertices[A]/2) + TabVertices[B]/2 + TabVertices[C]/8 + TabVertices[D]/8 - TabVertices[G]/16 - TabVertices[H]/16 - TabVertices[F]/16 - TabVertices[E]/16);
  4. }
  5.  
  6.  
  7. void butterFly() {
  8.  
  9.   int oldNbPolys = nbPolys;
  10.   nbPolys=nbPolys + 7*nbPolys;
  11.  
  12.   int oldNbPoints = nbPoints;
  13.   nbPoints= nbPoints + 3*oldNbPolys;
  14.  
  15.   TabVertices = (float*) realloc(TabVertices, sizeof(float) * (3*nbPoints));
  16.   TabIndices =  (int*)   realloc(TabIndices,  sizeof(int) * (3*nbPolys));
  17.   TabNormals =  (float*) realloc(TabNormals,  sizeof(int) * (3*nbPolys));
  18.   TabVoisins = (int*)   realloc(TabVoisins, sizeof(int)*(3*nbPolys));
  19.  
  20.   // Crée les sous triangles du centre
  21.   int k = oldNbPolys;
  22.   for(int i = 0; i< oldNbPolys; i++) {
  23.  
  24.     TabIndices[3*k] = oldNbPoints+3*i;
  25.     TabIndices[3*k+1] = oldNbPoints+3*i+1;
  26.     TabIndices[3*k+2] = oldNbPoints+3*i+2;
  27.  
  28.     std::cout<< TabIndices[3*k] <<std::endl;
  29.     std::cout<< TabIndices[3*k+1]<<std::endl;
  30.     std::cout<< TabIndices[3*k+2]<<std::endl<<std::endl;
  31.     k++;
  32.   }
  33.  
  34.  
  35.   double x1, x2, x3;
  36.   double y1, y2, y3;
  37.   double z1, z2, z3;
  38.  
  39.   k = 2* oldNbPolys;
  40.  
  41.   for(int i = 0 ; i< oldNbPolys; i++) {
  42.  
  43.     // Pour chaque arrête du poly en question il faut faire le calcule suivant :
  44.     // Chercher les deux sommets qui font partie des triangles qui contiennent A et B en sommets
  45.  
  46.  
  47.    // premier sommet
  48.     int A = TabIndices[3*i];
  49.     int B = TabIndices[3*i+1];
  50.     int C = TabIndices[3*i+2];
  51.     std::cout<<"Point A :"<<A<<" point B : "<<B<<" point C : "<<C<<"\n";
  52.  
  53.     int D = -1;
  54.     int G = -1;
  55.     int H = -1;
  56.     int F = -1;
  57.     int E = -1;
  58.  
  59.     D = indicePointRestantTriangle(A,B, oldNbPolys, C); // Point D, symétrique de C par rapport à AB
  60.     G = indicePointRestantTriangle(D,B, oldNbPolys, A); // Point G, symétrique de A par rapport à DB
  61.     H = indicePointRestantTriangle(A,D, oldNbPolys, B); // Point H, symétrique de B par rapport à AD
  62.     F = indicePointRestantTriangle(A,C, oldNbPolys, B); // Point F, symétrique de B par rapport à AC
  63.     E = indicePointRestantTriangle(C,B, oldNbPolys, A); // Point E, symétrique de A par rapport à CB
  64.  
  65.   x1 = calculCoordButterFly(3*(A) , 3*(B), 3*C, 3*D, 3*E, 3*F, 3*G, 3*H);
  66.   y1 = calculCoordButterFly(3*(A)+1, 3*(B)+1, 3*C+1, 3*D+1, 3*E+1, 3*F+1, 3*G+1, 3*H+1);
  67.   z1 = calculCoordButterFly(3*(A)+2, 3*(B)+2, 3*C+2, 3*D+2, 3*E+2, 3*F+2, 3*G+2, 3*H+2);
  68.  
  69.   TabVertices[3*TabIndices[3*(oldNbPolys+i)]] =   x1;
  70.   TabVertices[3*TabIndices[3*(oldNbPolys+i)]+1] = y1;
  71.   TabVertices[3*TabIndices[3*(oldNbPolys+i)]+2] = z1;
  72.  
  73.  
  74.   TabIndices[3*k]   = TabIndices[3*(oldNbPolys+i)]; // Ajout triangle (A,B,MILIEU)
  75.   TabIndices[3*k+1] = A;
  76.   TabIndices[3*k+2] = B;
  77.   k++;
  78.  
  79.     // second sommet
  80.     A = TabIndices[3*i];
  81.     B = TabIndices[3*i+2];
  82.     C = TabIndices[3*i+1];
  83.     std::cout<<"Point A :"<<A<<" point B : "<<B<<" point C : "<<C<<"\n";
  84.  
  85.     D = -1;
  86.     G = -1;
  87.     H = -1;
  88.     F = -1;
  89.     E = -1;
  90.  
  91.     D = indicePointRestantTriangle(A,B, oldNbPolys, C); // Point D, symétrique de C par rapport à AB
  92.     G = indicePointRestantTriangle(D,B, oldNbPolys, A); // Point G, symétrique de A par rapport à DB
  93.     H = indicePointRestantTriangle(A,D, oldNbPolys, B); // Point H, symétrique de B par rapport à AD
  94.     F = indicePointRestantTriangle(A,C, oldNbPolys, B); // Point F, symétrique de B par rapport à AC
  95.     E = indicePointRestantTriangle(C,B, oldNbPolys, A); // Point E, symétrique de A par rapport à CB
  96.  
  97.  
  98.   x2 = calculCoordButterFly(3*(A) , 3*(B), 3*C, 3*D, 3*E, 3*F, 3*G, 3*H);
  99.   y2 = calculCoordButterFly(3*(A)+1, 3*(B)+1, 3*C+1, 3*D+1, 3*E+1, 3*F+1, 3*G+1, 3*H+1);  
  100.   z2 = calculCoordButterFly(3*(A)+2, 3*(B)+2, 3*C+2, 3*D+2, 3*E+2, 3*F+2, 3*G+2, 3*H+2);
  101.  
  102.   TabVertices[3*TabIndices[3*(oldNbPolys+i)+1]] =   x2;
  103.   TabVertices[3*TabIndices[3*(oldNbPolys+i)+1]+1] = y2;
  104.   TabVertices[3*TabIndices[3*(oldNbPolys+i)+1]+2] = z2;
  105.  
  106.   TabIndices[3*k]   = TabIndices[3*(oldNbPolys+i)+1]; // Ajout triangle (A,B,MILIEU)
  107.   TabIndices[3*k+1] = A;
  108.   TabIndices[3*k+2] = B;
  109.   k++;
  110.  
  111.   // troisieme sommet
  112.  
  113.     A = TabIndices[3*i+2];
  114.     B = TabIndices[3*i+1];
  115.     C = TabIndices[3*i];
  116.     std::cout<<"Point A :"<<A<<" point B : "<<B<<" point C : "<<C<<"\n";
  117.  
  118.     D = -1;
  119.     G = -1;
  120.     H = -1;
  121.     F = -1;
  122.     E = -1;
  123.  
  124.     D = indicePointRestantTriangle(A,B, oldNbPolys, C); // Point D, symétrique de C par rapport à AB
  125.     G = indicePointRestantTriangle(D,B, oldNbPolys, A); // Point G, symétrique de A par rapport à DB
  126.     H = indicePointRestantTriangle(A,D, oldNbPolys, B); // Point H, symétrique de B par rapport à AD
  127.     F = indicePointRestantTriangle(A,C, oldNbPolys, B); // Point F, symétrique de B par rapport à AC
  128.     E = indicePointRestantTriangle(C,B, oldNbPolys, A); // Point E, symétrique de A par rapport à CB
  129.  
  130.  
  131.  
  132.   x3 = calculCoordButterFly(3*(A) , 3*(B), 3*C, 3*D, 3*E, 3*F, 3*G, 3*H);
  133.   y3 = calculCoordButterFly(3*(A)+1, 3*(B)+1, 3*C+1, 3*D+1, 3*E+1, 3*F+1, 3*G+1, 3*H+1);  
  134.   z3 = calculCoordButterFly(3*(A)+2, 3*(B)+2, 3*C+2, 3*D+2, 3*E+2, 3*F+2, 3*G+2, 3*H+2);
  135.  
  136.   TabVertices[3*TabIndices[3*(oldNbPolys+i)+2]] =   x3;
  137.   TabVertices[3*TabIndices[3*(oldNbPolys+i)+2]+1] = y3;
  138.   TabVertices[3*TabIndices[3*(oldNbPolys+i)+2]+2] = z3;
  139.  
  140.   TabIndices[3*k]   = TabIndices[3*(oldNbPolys+i)+2]; // Ajout triangle (A,B,MILIEU)
  141.   TabIndices[3*k+1] = A;
  142.   TabIndices[3*k+2] = B;
  143.   k++;
  144.  
  145.  
  146.  
  147.   // premier triangle
  148.     TabIndices[3*k]   = TabIndices[3*(oldNbPolys+i)];
  149.     TabIndices[3*k+1] = TabIndices[3*(oldNbPolys+i)+1];
  150.     TabIndices[3*k+2] = TabIndices[3*i+1];
  151. /*    std::cout<<"premier triangle"<<std::endl;
  152.     std::cout<< TabIndices[3*k] <<std::endl;
  153.     std::cout<< TabIndices[3*k+1]<<std::endl;
  154.     std::cout<< TabIndices[3*k+2]<<std::endl<<std::endl;*/
  155.     k++;
  156.  
  157.   // deuxieme triangle
  158.  
  159.     TabIndices[3*k]   = TabIndices[3*(oldNbPolys+i)];
  160.     TabIndices[3*k+1] = TabIndices[3*i];
  161.     TabIndices[3*k+2] = TabIndices[3*(oldNbPolys+i)+2];
  162. /*    std::cout<<"deuxieme triangle"<<std::endl;
  163.     std::cout<< TabIndices[3*k] <<std::endl;
  164.     std::cout<< TabIndices[3*k+1]<<std::endl;
  165.     std::cout<< TabIndices[3*k+2]<<std::endl<<std::endl;*/
  166.     k++;
  167.  
  168.   // troisieme triangle
  169.     TabIndices[3*k]   = TabIndices[3*i+2];
  170.     TabIndices[3*k+1] = TabIndices[3*(oldNbPolys+i)+1];
  171.     TabIndices[3*k+2] = TabIndices[3*(oldNbPolys+i)+2];
  172. /*    std::cout<<"troisieme triangle"<<std::endl;
  173.     std::cout<< TabIndices[3*k] <<std::endl;
  174.     std::cout<< TabIndices[3*k+1]<<std::endl;
  175.     std::cout<< TabIndices[3*k+2]<<std::endl<<std::endl;*/
  176.     k++;
  177.  
  178. }
  179.   // Reajustement des normales
  180.   calculNormalesAuxTriangles(nbPolys);
  181.   // Recalcul des voisins
  182.   fillVoisinTab(TabIndices, TabVoisins, nbPolys);
  183.  
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement