3D Objekte einfügen



  • Hallo zusammen,

    Ich habe eine 3D Box, deren x,y,z Werten sind bekannt, also die größe der Box. Nun möchte ich diese Box mit Elemente füllen, deren Größe sind auch bekannt. Die elemente Sind auch 3D. Mit 3D meine ich, dass sie würfels sind.

    ich hole diese informationen (größe der Elemente und der Box) aus einer Input.txt. und möchte nun iterativ einmal auf x Achse und Y dann Z Achse alle allemnte in der Box einfügen.

    Wie würde meine schleife dann aussehen ?
    Kann mir einer dabei helfen`??

    THX


  • Mod

    guguli schrieb:

    Wie würde meine schleife dann aussehen ?

    In der Version, die du gerade beschreibst:

    möchte nun iterativ einmal auf x Achse und Y dann Z Achse alle allemnte in der Box einfügen.

    würde ich ja sagen: Eine Schleife über x, eine über y, eine über z. Schrittweite ist die jeweils größte Box im Durchlauf der inneren Schleife, wenn es keine Überlappungen geben soll (das hast du zwar nie gesagt, aber ich lese das mal zwischen den Zeilen heraus).

    Interessanter wird die Aufgabe natürlich, wenn du noch andere Bedingungen bringst. Zum Beispiel, dass das irgendwie "dicht" gepackt wird. Aber dafür denke ich mir nicht auf gut Glück einen Algorithmus aus (oder eher: Suche bei Google/Wikipedia), sofern du nicht ausdrücklich sagst, dass du so etwas suchst.



  • sorry, ich weiss hab sehr schlecht formuliert :).

    Aber ich weiss nicht wie ich aus meiner input.txt die daten raus holen soll.
    soe sieht meine daten aus :
    NumBoxSize = 1
    BoxSizeX = 0.002000
    BoxSizeY = 0.002000
    BoxSizeZ = 0.001250

    NumDummyElements = 1
    DummySizeX = 0.000400
    DummySizeY = 0.000400
    DummySizeZ = 0.000250

    Die will ich nun benutzen.
    Ich dachte ich muss erstmal wissen wieviel elemente auf je Achse passen. so muss ich einfach BoxSizeX / DummySizeX beispielweise machen dann das ergebnis zuweisen. Diese Daten muss ich ja erstmal einlesen und genau das hier ist mein problem.
    also ich dachte so was :

    int NumberOfEleentX = BoxSizeX / DummySizeX;
    

    das funktioniert aber nicht, da diese nicht definiert sind.
    undich weiss nicht wie ich diedaten aus input.txt holen soll.

    Kannste mir bitte helfen??


  • Mod

    guguli schrieb:

    Kannste mir bitte helfen??

    *Krachbumm*

    Das waren meine Erwartungen nach der ersten Frage, die von der zweiten Frage gegen die Wand gefahren wurden 🙂 . Ich hatte an einen coolen Packalgorithmus gedacht, du möchtest bloß Grundlagen zur Ein- und Ausgabe lernen. 😞

    Was soll man dazu groß sagen? Das sollte in jedem Anfängerbuch beginnend vom ungefähr 2. Kapitel erklärt werden. Du definierst dir passende Objekte, schreibst für diese eine Eingabefunktion, die dein Format liest. Aufgebaut werden diese Funktionen mit den grundlegenden Eingabefunktionen:
    http://www.cplusplus.com/reference/istream/istream/ (formatted und unformatted input)
    Eventuell unter Zuhilfenahme komplexerer Mittel der Standardbibliothek:
    http://www.cplusplus.com/reference/string/
    http://www.cplusplus.com/reference/sstream/stringstream/
    Und natürlich passende Kontrollstrukturen.

    Konkrete Beispiele für dein Format kannst du bekommen, wenn du dieses genauer beschreibst, ich werde da nicht so ganz schlau aus dem Beispiel. Hier im Forum gibt es auch massenhaft Threads dazu, von einfach bis fortgeschritten. Such zum Beispiel mal nach dem Autor "Werner Salomon".



  • um das genauer zu beschreiben:
    ich hol die Parameter aus der input.txt wie folgt: ( diese wird in Simulator.cpp geschehen)

    bool CSimulator::setParams(std::map<CString,CString> &params)
    {  
      std::vector<double> arrBoxSizes[NUM_AXIS];
      std::vector<double> arrBoxPts[NUM_AXIS];
    
    if(params.find(_T("DummySizeX")) != params.end())
        m_ptDummyElementSize[X_AXIS] = CConvert::atof(params[_T("DummySizeX")].c_str());
      if(params.find(_T("DummySizeY")) != params.end())
        m_ptDummyElementSize[Y_AXIS] = CConvert::atof(params[_T("DummySizeY")].c_str());
      if(params.find(_T("DummySizeZ")) != params.end())
        m_ptDummyElementSize[Z_AXIS] = CConvert::atof(params[_T("DummySizeZ")].c_str());
     if(params.find(_T("BoxSizeX")) != params.end())
         parseListToDoubleArray(arrBoxSizes[X_AXIS], params[_T("BoxSizeX")]);
      if(params.find(_T("BoxSizeY")) != params.end())
         parseListToDoubleArray(arrBoxSizes[Y_AXIS], params[_T("BoxSizeY")]);
      if(params.find(_T("BoxSizeZ")) != params.end())
         parseListToDoubleArray(arrBoxSizes[Z_AXIS], params[_T("BoxSizeZ")]);
    

    dann komm ich in Data.cpp und versuche wie gesagt diese Paramaters zu benutzen:

    double NumberOfElementX = CSimulator::S()->m_arrBoxSizes[X_AXIS] / CSimulator::S()->m_ptDummyElementSize[X_AXIS];
    

    das geht aber nicht da "/" stimmt mit diesen Operanden nicht überein.
    Ich dachte so hol ich die werte oder nicht?????


Anmelden zum Antworten