schnittpunkt von zwei Geraden berechnen
-
Der titel sagt schon alles.
Keine Sorge dass mit dem schnittpunkt hab ich schon in der Schule gelernt.
Ich hab nur absolut keine Ahnung wie das in c++ umzusetzen is, kann mir jmnd helfen?
-
Hi,
alterbro schrieb:
[..], kann mir jmnd helfen?
Spontan hätte ich gesagt du diskretisierst deine x-Achse, packst die zugehörigen Werte der beiden Geraden in einen Array und bildest dann jeweils die Differenz zwischen zwei Werten. Dort wo das Ergebnis im kleinsten ist (im Idealfall Null) hast du den Schnittpunkt, d.h. du musst dann nur wieder rückwärts den entsprechenden x-Wert ausrechnen.
Aber schau doch mal ein wenig nach (Gerade- ) Schnittpunkt und Numerik bei google. Vielleicht findest du da was.
Gruß,
Klaus.
-
@Klaus82: Das ist unnötig und ineffizient.
@alterbro: Gib mal ein paar mehr Rahmendaten, wie hast du in der Schule das Ausrechnen des Schnittpunkts gelernt? Warum willst du das in C++ machen und was hast du bereits?
-
Rechne mal auf Papier aus, was der Schnittpunkt der beiden Geraden
P1 + s * V1
und
P2 + t * V2
ist. Ganz allgemein in Abhängigkeit von P1, P2, V1 und V2. Und dieses Ergebnis setzt du in dein Programm ein.
Du kannst natürlich auch jede andere Form von Geradengleichung benutzen, kommt drauf an, was du vorliegen hast.
-
Mit Geradengleichungen ohne Vektoren:
Ich würde erstmal 2 Gleichungen aufstellen, bei denen ich einfach nur noch einsetzen muss, um X und Y des Schnittpunktes zu bekommen.
y1 = m1x + b1
y2 = m2x + b2Gleichsetzen:
m1*x + b1 = m2*x + b2
m1*x - m2*x = b2 - b1Ausklammern:
x * (m1 - m2) = b2 - b1
Ergebnis:
x = (b2 - b1) / (m1 - m2)So, für y brauch man dann nur noch in eine der gleichungen einsetzen:
y = m1* ((b2 - b1 / (m1 - m2)) + b1
So und mit diesen Gleichungen kannst du das ganze doch recht einfach (mit simplen Ausrechnen) den Schnittpunkt erhalten.
Ablauf:
- Werte b1, b2, m1, m2 vom Benutzer holen (wie auch immer, bei Console z.b. mit std::cin)
- Mit obiger Formel berechnen
- Ausgeben
- Fertig!
Mit Vektoren auf Nachfrage
-
Sebastian Pizer hat dazu mal einen netten Beitrag hier gemacht.
-
danke, ich seh mir das mal an