Schnittpunkt zwischen Geraden und Fläche im R3 als Code umsetzen?
-
Moin,
ich muss derzeit den Schnittpunkt einer Geraden mit einer Fläche im R3 bestimmen. Prinzipiell war mein Ansatz bisher:
- Geradengleichung mit Ebenengleichung der Fläche gleichsetzen
- Gleichungssystem auflösen (sofern lösbar erhält man entsprechend den Schnittpunkt zwischen Ebenen und Geraden)
- 2D-Abstand zwischen erhaltenem Punkt und Mittelpunkt meiner Fläche prüfen (Um sicher zu stellen, dass der Punkt auf der Fläche liegt und nicht irgendwo außerhalb dieser)Ich habe also meine zwei Gleichungen
g: p + a * q
e: r + b * s + c * tSetze ich diese gleich, so erhalte ich drei Gleichungen mit drei Unbekannten (a,b,c)
p.x + a * q.x = r.x + b * s.x + c * t.x
p.y + a * q.y = r.y + b * s.y + c * t.y
p.z + a * q.z = r.z + b * s.z + c * t.zAuf dem Papier ist dieses Gleichungssystem jetzt relativ leicht zu bewältigen, jedoch frage ich mich, wie ich dieses jetzt in z.B. C++ umsetzen könnte, da ich (egal wie umgestellt) ich niemals eine Gleichung mit nur einer Unbekannten erhalte. Ich komme maximal soweit, dass ich eine der Unbekannten durch Einsetzen auflösen kann.
Gibt es dafür einen speziellen Rechenweg, der sich im Code umsetzen lässt?
Grüße
ntldr
-
ntldr schrieb:
Gibt es dafür einen speziellen Rechenweg, der sich im Code umsetzen lässt?
wieso sollte sich ein rechenweg nicht mit code loesen lassen? willst du selbst den loesungsweg ausknobbeln, oder moechtest du irgend einen weg ergooglen und implementieren?
weiss garnicht wie und womit man dir helfen soll.
-
Nun es ist mir nicht bekannt, wie ich dieses Gleichungssystem auch nur im Ansatz implementiert durch den Code lösen lassen könnte. Google führt mich hier im Prinzip nur zu Forenbeiträgen, in denen der Lösungsweg allgemein beschrieben wird.
-
ntldr schrieb:
Ich habe also meine zwei Gleichungen
g: p + a * q
e: r + b * s + c * tSetze ich diese gleich, so erhalte ich drei Gleichungen mit drei Unbekannten (a,b,c)
p.x + a * q.x = r.x + b * s.x + c * t.x
p.y + a * q.y = r.y + b * s.y + c * t.y
p.z + a * q.z = r.z + b * s.z + c * t.zAuf dem Papier ist dieses Gleichungssystem jetzt relativ leicht zu bewältigen, jedoch frage ich mich, wie ich dieses jetzt in z.B. C++ umsetzen könnte, da ich (egal wie umgestellt) ich niemals eine Gleichung mit nur einer Unbekannten erhalte. Ich komme maximal soweit, dass ich eine der Unbekannten durch Einsetzen auflösen kann.
Sorry, Du hast 3 Unbekannte und 3 Gleichungen.
Da musst Du nur den Gauß duchnudeln und bekommst die Lösung. Wenn das nicht klappt, dann musst Du Gauß noch mehr üben mit konkreten Zahlen. Bald wird's auch mit den Buchstaben klappen. Bleib formal und phantasielos am Schema und hacke es mit Buchstaben durch. Es klappt.Gauß-Jordan sogar, würde ich meinen. Noch ekliger mit Zahlen, aber cool für Deine Zwecke.
Alternativ kannste irgend ein Computeralgebrasystem benutzen. Wird aber mehr Einarbeitungszeit kosten als daß Du es schnell auf Papier durchnudelst. Warum kannst Du es morgen duchnudeln? Weil ich es sage, es wird klappen. Nu bist Du siegesgewiß und baust keinen Scheiß. Frag die Koniferen im Forum (zu denen ich hier nicht gehöre), sie sagen Dir alle, daß Du bei 3 linearen Gleichungen und 3 Variablen zum Schuß kommst. Kranke Fälle wie daß die Gerade parallel zur Ebene ist, nehmen wir mal aus, dann kommts wohl mal zu 1/0 oder 0/0.
-
ntldr schrieb:
Nun es ist mir nicht bekannt, wie ich dieses Gleichungssystem auch nur im Ansatz implementiert durch den Code lösen lassen könnte. Google führt mich hier im Prinzip nur zu Forenbeiträgen, in denen der Lösungsweg allgemein beschrieben wird.
achso, googlen ist dein problem :), gut, bitte: http://en.wikipedia.org/wiki/Line–plane_intersection