PDA

Visualizza la versione completa : Calcolare centro semisfere da un file STL


bettina86
03-10-2017, 18:40
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++.



#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;
}

bettina86
10-10-2017, 15:39
Nessuno, ha qualche idea di cosa Ŕ sbagliato e come risolvere? Grazie.

linoma
10-10-2017, 15:41
velocemente nn carichi i trinagoli dal file o sbaglio? A prescindere il calcolo matematico

Loading