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 benutzenFalls 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 benutzenFalls 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?