Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Calcolare centro semisfere da un file STL

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

  2. #2
    Nessuno, ha qualche idea di cosa è sbagliato e come risolvere? Grazie.

  3. #3
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    velocemente nn carichi i trinagoli dal file o sbaglio? A prescindere il calcolo matematico
    Per gli Spartani e Sparta usa spartan Il mio github

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.