Ho un file STL(stereolitography) che può essere ascii o binario che rappresentano delle semisfere in uno spazio 3D.
Ci sono tre semisfere posizionate a forma di triangolo.
Devo trovare il centro delle sfere che poi servirà ad uno per allineare la tac con questo file senza farlo a mano.
Ho scritto del codice che penso che serva solo per un oggetto. Bisognerebbe trovare il centro per ognuna. Non so se il codice è corretto in quanto non conosco benissimo il c++.
codice:#include <iostream> #include <stdio.h> #include <sstream> #include <fstream> #include <cstdlib> #include <string> #include <stdlib.h> using namespace std; class data // i 3 vertici di ciascun triangolo { public: float x1,y1,z1; float x2,y2,z2; float x3,y3,z3; }; int main (int argc, char* argv[]) { FILE *fileStl; fileStl = fopen(argv[1], "rb"); // std::cout << "Inserisci un nome per un .stl file" <<std::endl; unsigned char * pBuf[80]; uint32_t numTriangles; fread(&numTriangles, 4, 1, fileStl); // determina il numero dei triangoli che formano la semisfera dal file STL numTriangles = *((uint32_t *)pBuf); data * triangles = new data[numTriangles]; // riempi l'array triangles con i dati nel file STL double totalVolume = 0, currentVolume; double xCenter = 0, yCenter = 0, zCenter = 0; //usa la formula matematica per trovare il centroide for (int i = 0; i < numTriangles; i++) { totalVolume += currentVolume = (triangles[i].x1*triangles[i].y2*triangles[i].z3 - triangles[i].x1*triangles[i].y3*triangles[i].z2 - triangles[i].x2*triangles[i].y1*triangles[i].z3 + triangles[i].x2*triangles[i].y3*triangles[i].z1 + triangles[i].x3*triangles[i].y1*triangles[i].z2 - triangles[i].x3*triangles[i].y2*triangles[i].z1) / 6; xCenter += ((triangles[i].x1 + triangles[i].x2 + triangles[i].x3) / 4) * currentVolume; yCenter += ((triangles[i].y1 + triangles[i].y2 + triangles[i].y3) / 4) * currentVolume; zCenter += ((triangles[i].z1 + triangles[i].z2 + triangles[i].z3) / 4) * currentVolume; } cout << endl << "Total Volume = " << totalVolume << endl; cout << endl << "X center = " << xCenter/totalVolume << endl; cout << endl << "Y center = " << yCenter/totalVolume << endl; cout << endl << "Z center = " << zCenter/totalVolume << endl; }

Rispondi quotando
