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