unbekannter Rückgabewert



  • Hey,
    ich hab n Problem,
    wenn man prüft wie eine Ebene zu einer anderen Ebene liegt,
    bzw wie eine Ebene zu einer Linie liegt, gibt es verschiedene Lösungen.

    Beispielsweise: (EbeneEbene)

    kein Schnitt: Ebenen parallel.
    Schnittlinie: Ebenen sind nicht parallel.
    Schnittebene: Ebenen parallel und inneinander.

    jetzt ist mein Problem, wie soll ich den aufbau der Methoden machen?
    Da ich nicht weiss wie der Rückgabewert ist...

    Danke für Tips

    kolu



  • Ich nehme mal an du arbeitest irgendwie mit einer Klasse, um die Ebenen in Vektoren zu fassen.
    z.B:

    VektorKlasse meinVector(1,2,-3);
    

    Dann kannst du Ebenen als ein Array von 3 Vektoren auffassen

    VektorKlasse* meineEbene[] = {
      new VektorKlasse(0,0,0),  //Der Stützvektor
      new VektorKlasse(1,2,1),  //Der erste Spannvektor
      new VektorKlasse(2,2,-2)  //Der zweite Spannvektor
    };
    

    Eine Gerade kann als Array von 2 Vektoren aufgefasst werden

    VektorKlasse* meineEbene[] = {
      new VektorKlasse(0,0,0),  //Der Stützvektor
      new VektorKlasse(1,2,1),  //Der Richtungsvektor
      NULL
    };
    

    Die Methode, die die Lage zweier Ebenen auswertet könnte dann wie folgt aussehen:

    VektorKlasse** ebenenSchneiden(VektorKlasse** ebene1, VektorKlasse** ebene2);
    

    Als Rückgabewert gibt die Funktion wieder ein Array von Vektoren zurück. Damit du später keine Probleme bekommst, solltest du am besten immer 3-Elementige Arrays zurückgeben und ungenutzte Dimensionen mit NULL belegen. Oder du benutzt einen std::vector<VektorKlasse*> um deine Vektoren zu sammeln.
    Um es noch weiter zu optimieren könntest du statt normaler Zeiger auto_ptr benutzen 😉

    Falls du auf was völlig anderes hinaus wolltest, müsstest du das Problem etwas genauer schildern 😃



  • Soley schrieb:

    Ich nehme mal an du arbeitest irgendwie mit einer Klasse, um die Ebenen in Vektoren zu fassen.
    z.B:

    VektorKlasse meinVector(1,2,-3);
    

    Dann kannst du Ebenen als ein Array von 3 Vektoren auffassen

    VektorKlasse* meineEbene[] = {
      new VektorKlasse(0,0,0),  //Der Stützvektor
      new VektorKlasse(1,2,1),  //Der erste Spannvektor
      new VektorKlasse(2,2,-2)  //Der zweite Spannvektor
    };
    

    Eine Gerade kann als Array von 2 Vektoren aufgefasst werden

    VektorKlasse* meineEbene[] = {
      new VektorKlasse(0,0,0),  //Der Stützvektor
      new VektorKlasse(1,2,1),  //Der Richtungsvektor
      NULL
    };
    

    Die Methode, die die Lage zweier Ebenen auswertet könnte dann wie folgt aussehen:

    VektorKlasse** ebenenSchneiden(VektorKlasse** ebene1, VektorKlasse** ebene2);
    

    Als Rückgabewert gibt die Funktion wieder ein Array von Vektoren zurück. Damit du später keine Probleme bekommst, solltest du am besten immer 3-Elementige Arrays zurückgeben und ungenutzte Dimensionen mit NULL belegen. Oder du benutzt einen std::vector<VektorKlasse*> um deine Vektoren zu sammeln.
    Um es noch weiter zu optimieren könntest du statt normaler Zeiger auto_ptr benutzen 😉

    Falls du auf was völlig anderes hinaus wolltest, müsstest du das Problem etwas genauer schildern 😃

    ist ne Möglichkeit, aber eine, wie ich finde, nicht sehr schöne.
    DAnke trotzdem.



  • wie wäre es mit boost::variant? (Geht das unter C++/CLI?)



  • pyhax schrieb:

    wie wäre es mit boost::variant? (Geht das unter C++/CLI?)

    damit kann ich leider nichts anfangen... was ist das?



  • Ich weiß nicht, ich kenne nur C++. Aber kann man C++ Libraries auch in C++/CLI benutzen? Wenn ja, http://boost.org



  • Native C++ und C++/CLI (managed) zu mischen ist generell eine schlechte Idee, wenn nicht Interoperabilität zwischen den Welten das Ziel ist.

    Also:
    Es sieht so aus, als würdest Du mathematische Vektoren brauchen... oder?
    Warum nicht z.B. IL Numerics (http://ilnumerics.net/)?

    EDIT
    @pyhax: Warum (boost::)variant? Nur weil man da alles reinstopfen kann?


Anmelden zum Antworten