Geraden schneiden [C++ Programm]



  • Hallo Mathematiker,

    hoffe ich hab das hier richtig gepostet!

    Hab folgendes Problem: Vor kurzem habe ich ein Programm programmiert, dass den Schnittpunkt zweier Geraden ausrechnet. Dazu verwende ich das Eliminationsverfahren. Das Programm funktioniert zwar einwandfrei, aber nur so lange beide Geraden 2 Unbekannte haben, also dass weder x noch y gleich 0 sind.

    Die Geraden müssen also so aussehen: ax+by=c
    Wenn jetzt z.B. a=0 ist kann ich ja kein Eliminationsverfahren anwenden. Mir ist schon klar, dass ich jetzt a in die 2. Gerade einsetzten kann und damit den Schnittpunkt errechne, aber gibt es keine Möglichkeit irgendwie "alle" Geraden mit einem bestimmten Verfahren auszurechen? Damit das Programm nicht unnötig mit if..else Verzweigungen ausgestattet wird.

    Oder bleibt mir nichts anderes übrig als mit if...else zu prüfen ob die Gerade nur eine Unbekannte hat?.

    Danke



  • Wieso kannst Du da kein Eliminationsverfahren einsetzen? Wenn die erste Gerade a=0 hat, dann vertausch doch die beiden Geraden einfach. Haben beide dort ne 0 stehen, dann sind die Geraden entweder gleich oder parallel und verschieden. Das dürfte dann nicht mehr schwer herauszufinden sein.



  • du kannst die Geraden auch in Parameterform darstellen (such ma danach) dann hast du keine Probleme mehr mit Anstieg 0 oder Anstieg unendlich.



  • danke für die Antowrten!

    @Maxi
    genau das habe ich gleich gedacht, als ich drauf gekommen bin, dass mein Programm diesen Fehler hat. Ich wollte nur mal Fragen ob es nicht eine Lösung mit der Gleichungsdarstellung gibt, da ich das Ausrechnen für diese schon programmiert hab. Aber ich glaube das einfachste wird sein, wenn ich es einfach für Parameterdarstellung umprogrammiere.

    mfg



  • komm mal wieder nicht weiter:

    wie berechnet man den Schnittpunkt der folgenden Geraden mittels Parameterdarstellung

    \vec x(t) = \left({-2 \atop 1}\right) + t * \left({0 \atop 3}\right)

    \vec x(s) = \left({1 \atop 3}\right) + s * \left({-1 \atop 0}\right)

    Danke im Vorraus



  • die Geraden schneiden sich, wenn x(t) = x(s).



  • g1:

    x=-2
    y=1+3*t

    g2:
    x=1-s
    y=3

    gleichsetzen:
    1-s=-2
    3=1+3t

    t und s ausrechnen



  • Das ändert allerdings nicht das ursprüngliche Problem. Der erste Parameter kann immernoch 0 sein. Im Prinzip wird hier ja genau das selbe LGS gelöst. Ein Problem mit unendlichen Steigungen besteht auch bei der ursprünglich verwendeten Form nicht.



  • zu Kollision Linie - Linie hätt ich auch noch ne Frage, aber zu 3D.

    Habe erstmal das entstehende GS aus den beiden Parametergleichungen per Hand mit Gauss gelöst. Aber da gibts dann ja in der Auswertung auch wieder viel zu beachten(war der erste 0, kommt wirklich was raus, usw., ist ja auch leider ein überbestimmtest GS, daher geht Cramersche Regel nicht)
    Kann man das irgendwie vereinfachen oder hat wer nen Link zu nem guten Algorithmus?
    Googlen nach Linie und Kollision habe ich noch nichts 3D mäßiges gefunden, immmer nur x-y-Ebene.



  • Man kann, um festzustellen ob sich 2 Geraden in 3D schneiden sich den Verbindungsvektor zwisschen zwei Punkten auf den Geraden anschaun. (Zum Beispiel Verbindungsvektor der Stützpunkte. Liegt dieser in der Ebene, die von den beiden Richtungsvektoren aufgespannt wird, dann schneiden sich auch die Geraden.

    Um auf lineare Unabhängigkeit zu prüfen muß man eigentlich nur nachschaun, ob die entsprechende Matrix vollen Rang hat oder nicht, das heißt man kommt mit der simplen Berechnung einer Determinante aus. Dann weiß man allerdings nur, ob es einen Schnittpunkt gibt, aber nicht wo dieser liegt.

    Aber vermutlich ist es doch am einfachsten den Schnittpunkt direkt mit Gauß-Elimination zu bestimmmen oder?



  • wird wohl Gauss werden, weil ich den Schnittpunkt brauche(teste 2 Strecken gegeineander, da muss ich ja testen, ob der Schnittpunkt auf beiden Strecken liegt)

    THX for help


Anmelden zum Antworten