Schnittpunkt zweier Geraden berechnen

ibhi

Mitglied
Hallo,

ich habe folgendes Problem: ich habe 2 Geraden, von denen ich jeweils die Endpunkte kenne, also P1(x1,y1), P2(x2,y2) usw. und ich weiß, dass sie sich schneiden. Ich benötige nun die Koordinaten des Schnittpunktes. Eigentlich dürfte das nicht allzu schwer sein, aber ich hab bei dem Thema wohl ein Brett vorm Kopf. Kann mir vielleicht jemand helfen? Google und die Suchfunktion haben nicht dazu geführt, dass es bei mir klick macht :(

LG
 

ibhi

Mitglied
Hm, mit konkreten Werten krieg ich das berechnet, aber wie ich das in Javacode übersetzen kann ist ein Problem. Die Geradengleichungen zu bekommen geht ja noch, aber wie ich das mit dem Gleichsetzen hinkriegen kann ist mir ein Rätsel...
 

JStein52

Top Contributor
Dann könntest du es etwa so machen:
Code:
import java.awt.geom.Point2D;

/**
 *
 * @author Juergen
 */
public class Gerade {

    // Gerade der Form y = m*x + b
    public final double m, b;

    public Gerade(double m, double b) {
        this.m = m;
        this.b = b;
    }
    public Gerade(double x1, double y1, double x2, double y2) {
        this.m = (y2-y1)/(x2-x1);
        this.b = y2-m*x2;
    }

    public Point2D.Double intersect(Gerade line) {
        double x = (this.b - line.b) / (this.m - line.m);
        double y = this.m * x + this.b;
        return new Point2D.Double(x, y);
    }
}
 

JStein52

Top Contributor
Ein bisschen mathematische Herleitung:
Angenommen du hast diese zwei Geraden:

y = m1*x + b1
y = m2*x + b2

Für den Schnittpunkt:

m1*x+b1 = m2*x+b2
m1*x-m2*x = b2 - b2
x(m1-m2) = (b2-b1)

x = (b2-b1) / (m1-m2)

Eingesetzt und nach y aufgelöst:

y = m1 * [(b2-b1) / (m1-m2)] + b1 = m1 * x + b1
 

JStein52

Top Contributor
Anwenden kannst du es dann so:
Code:
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Gerade gerade1 = new Gerade(0.3, 6.4);
        Gerade gerade2 = new Gerade(16.3, 17.4);
       
        System.out.println("Schnittpunkt "+gerade1.intersect(gerade2));
    }
 

JStein52

Top Contributor
Ja. Guck es dir nochmal an, vielleicht habe ich mich auf die Schnelle auch irgendwo verhauen ... ist noch nicht getestet. Und die main wenn du insgesamt 4 Punkte hast muss wie folgt aussehen:
Code:
    public static void main(String[] args) {
        Gerade gerade1 = new Gerade(0.3, 6.4, 21.4, 17.5);
        Gerade gerade2 = new Gerade(16.3, 17.4, 0.3, -7.1);
       
        System.out.println("Schnittpunkt "+gerade2.intersect(gerade1));
    }
 

JStein52

Top Contributor
Bei der Schnittpunktberechnung war noch ein Dreher drin:
Code:
    public Point2D.Double intersect(Gerade line) {
        double x = (line.b - this.b) / (this.m - line.m);
        double y = this.m * x + this.b;
        return new Point2D.Double(x, y);
    }
 
X

Xyz1

Gast
:mad:

Mit Vektors funktioniert das nicht, hier wäre meine Herleitung:

g(a) = A + a*(B-A)
g(a) = (x1,y1) + a*(x2-x1,y2-y1)
g(a) = (a*(x2-x1)+x1, a*(y2-y1)+y1)

(a*(x2-x1)+x1, a*(y2-y1)+y1) = (b*(x4-x3)+x3, b*(y4-y3)+y3)

a*(x2-x1)+x1 = b*(x4-x3)+x3 => b = (a*(x2-x1)+x1)/((x4-x3)+x3)
a*(y2-y1)+y1 = b*(y4-y3)+y3 => a = (b*(y4-y3)+y3)/((y2-y1)+y1)

a = (((a*(x2-x1)+x1)/((x4-x3)+x3))*(y4-y3)+y3)/((y2-y1)+y1)
1 = (((a*(x2-x1)+x1)/((x4-x3)+x3))*(y4-y3)+y3)/ (a*((y2-y1)+y1))

Möchte das ja nach a bringen, aber anscheinend geht das nicht.
 
X

Xyz1

Gast
Moin,
man kann es über Vektors lösen, ist allerdings nicht so "normal".
Hier die Herleitung, in der ich ne Fehler habe :( :

g(a) = A + a*(B-A)
g(a) = (x1,y1) + a*(x2-x1,y2-y1)
g(a) = (a*(x2-x1)+x1, a*(y2-y1)+y1)

(a*(x2-x1)+x1, a*(y2-y1)+y1) = (b*(x4-x3)+x3, b*(y4-y3)+y3)

a*(x2-x1)+x1 = b*(x4-x3)+x3 => b = (a*(x2-x1)+x1)/((x4-x3)+x3)
a*(y2-y1)+y1 = b*(y4-y3)+y3 => a = (b*(y4-y3)+y3)/((y2-y1)+y1)

a*(y2-y1)+y1 = ((a*(x2-x1)+x1)/((x4-x3)+x3))*(y4-y3)+y3
a*(y2-y1)+y1-y3 = ((a*(x2-x1)+x1)/((x4-x3)+x3))*(y4-y3)
(a*(y2-y1)+y1-y3)/(y4-y3) = (a*(x2-x1)+x1)/((x4-x3)+x3)
(a*(y2-y1)+y1-y3)/(y4-y3) = (a*(x2-x1)+x1)/x4
((a*(y2-y1)+y1-y3)*x4)/(y4-y3) = a*(x2-x1)+x1
(a*(y2-y1)+y1-y3)*x4 = a*(x2-x1)+x1*(y4-y3)
a*x4*(y2-y1)+x4*(y1-y3) = a*(x2-x1)+x1*(y4-y3)
a*x4*(y2-y1)-a*(x2-x1) = x1*(y4-y3)-x4*(y1-y3)
a*(x4*(y2-y1)-(x2-x1)) = x1*(y4-y3)-x4*(y1-y3)
a = (x1*(y4-y3)-x4*(y1-y3))/(x4*(y2-y1)-(x2-x1))
a = (x1*(y4-y3)+x4*(y3-y1)) / (x4*(y2-y1)+x1-x2)

Schnittpunkt:

S = (((x1*(y4-y3)+x4*(y3-y1)) / (x4*(y2-y1)+x1-x2))*(x2-x1)+x1, ((x1*(y4-y3)+x4*(y3-y1)) / (x4*(y2-y1)+x1-x2))*(y2-y1)+y1)
x = ((x1*(y4-y3)+x4*(y3-y1))/(x4*(y2-y1)+x1-x2))*(x2-x1)+x1
y = ((x1*(y4-y3)+x4*(y3-y1))/(x4*(y2-y1)+x1-x2))*(y2-y1)+y1

Code:
Java:
import java.awt.geom.Point2D;

/**
 * @author
 */
public class GeradenSchnittpunkt {

    public static void main(String[] args) {
        System.out.println(berechneSchnittpunkt(
                1.5, 4.5, 4.5, 1.5,
                1.5, 1.5, 4.5, 4.5));
        //
        // Ausgabe: Point2D.Double[3.0, 3.0]
        //
        System.out.println(berechneSchnittpunkt(
                2.5, 3.5, 4.5, 1.5,
                3, 1, 5, 3));
        //
        // Ausgabe: Point2D.Double[4.0, 2.0]
        //
    }

    private static Point2D.Double berechneSchnittpunkt(
            double x1, double y1, double x2, double y2,
            double x3, double y3, double x4, double y4) {
        return new Point2D.Double(
                (x1 * (y3 - y4) + x3 * (y4 - y1) + x4 * (y1 - y3)) / ((x1 - x2) * (y3 - y4) + x3 * (y2 - y1) + x4 * (y1 - y2)) * (x2 - x1) + x1,
                (x1 * (y3 - y4) + x3 * (y4 - y1) + x4 * (y1 - y3)) / ((x1 - x2) * (y3 - y4) + x3 * (y2 - y1) + x4 * (y1 - y2)) * (y2 - y1) + y1
        );
    }
}

Zeichnung:
fg.png

Möchte das jemand berichtigen? :confused:
 
X

Xyz1

Gast
in der ich ne Fehler habe
Doch kein Fehler, aber unvollständig....
Man muss a noch in die erste Gleichung einsetzen, nach b bringen und alles in g einsetzen - sonst fällt x3 weg / is not used. Wie natürlich sofort zu erkennen ist. :rolleyes:

Wieso ist berechneSchnittpunkt eigentlich richtig? Ich bin dann faul gewesen - und habe Wolframalpha um hilfe gefragt. :confused:

Aber es ist schon so, dass mir Gleichungen ab einer bestimmter Länge schwer für mich sind.
 
X

Xyz1

Gast
Man muss a noch in die erste Gleichung einsetzen, nach b bringen und alles in g einsetzen -
Das ist blödsinn.

(a*(x2-x1)+x1, a*(y2-y1)+y1) = (b*(x4-x3)+x3, b*(y4-y3)+y3)

a*(x2-x1)+x1 = b*(x4-x3)+x3 => b = (a*(x2-x1)+x1)/((x4-x3)+x3)
a*(y2-y1)+y1 = b*(y4-y3)+y3 => a = (b*(y4-y3)+y3)/((y2-y1)+y1)
DAS habe ich nicht korrekt nach a und b gebracht... Im Folgenden ist dann alles Falsch. - private static Point2D.Double berechneSchnittpunkt( ist allerdings richtig, weil wie bereits gesagt ich habe Wolframalpha nach hilfe gefragt. :/

Wer jetzt Angst hat, ob das in der Oberstufe in Klasse 12./13. dran kommt.... NEIN, das ist mehr so eine Zusatzaufgabe. :p Also Eure 1 könnt ihr auch so bekommen, ohne das Geblubber zu verstehen.
 
X

Xyz1

Gast
Aber warum denn einfach wenn es auch kompliziert geht
Das funktioniert theoretisch auch mit x. Dimensionen. Wobei ich mir gerade keine 4-dimensionale Gerade vorstellen kann.
Das KÖNNTE genauer sein, aber das vermag ich nicht zu sagen.
Zu beachten ist aber bitte, das x3 != x4 und y1 != y2 gelten sollte (........... denn wenn nicht........... identisch oder parallel). :confused:
Sonst verwirrt mich das Thema doch schon sehr.
 
Zuletzt bearbeitet von einem Moderator:
X

Xyz1

Gast
4-dimensionale "Geraden" ist der Übungsstoff der Linearen Algebra II, woran viele scheitern könnten.

So, ich habe keine Lust mehr auf das Thema. Das von @JStein52 ist naheliegender, nehmt einfach das. :)
 

JStein52

Top Contributor
Im Grundsatz ist es wurst, wie viele Komponenten/Dimensionen A und B (und C und D) haben.
Ja, du hast schon recht. Und man löst dies nach folgendem Schema:

  1. Wir haben zwei Geraden im n-dimensionalen Raum in der Form in der du es hingeschrieben hast, deren Schnittpunkt wir finden möchten
  2. Wir führen ein Gleichsetzen durch
  3. Wir stellen ein lineares Gleichungssystem auf
  4. Wir lösen dieses Gleichungssystem
  5. Mit dem Ergebnis berechnen wir den Schnittpunkt
Aber ich glaube dass du dich in deiner Herleitung oben für 2 Dimensionen irgendwo verhauen hast, war aber zu faul das nachzuprüfen
 
X

Xyz1

Gast
Aber ich glaube dass du dich in deiner Herleitung oben für 2 Dimensionen irgendwo verhauen hast,

DAS habe ich nicht korrekt nach a und b gebracht... Im Folgenden ist dann alles Falsch. -

DAS steht doch da... Sogar in roter Farbe...

Du brauchst dir da keine Mühe machen, was ich falsch gemacht hatte. Der Programmcode ist ja richtig... Um mehr als 2 Dimensionen ging es nicht...

Ich habe das eher als kleine sportliche Aufgabe für mich angesehen. Ich will niemanden verwirren. :confused:

Das Thema ist doch schon fertisch... Eine Rückmeldung vom TE wäre noch schön. Aber ansonsten gibt es hier nix mehr zu diskutieren. Stürz dich auf andere Themen. ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F.S.WhiTeY Schnittpunkt von kanten berechnen Java Basics - Anfänger-Themen 3
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
C Kollision zweier Rechtecke, Schnittpunkte bestimmen Java Basics - Anfänger-Themen 25
C alle möglichen Kombinationen zweier Ziffern auf drei / vier / und 'n" Stellen Java Basics - Anfänger-Themen 11
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
H Gemeinsame Schnittmenge zweier Arrays ausgeben Java Basics - Anfänger-Themen 12
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
K Datentypen Einträge zweier Matrizen vergleichen Java Basics - Anfänger-Themen 4
K Erste Schritte Berechnung der Summe zweier Arrays Java Basics - Anfänger-Themen 15
S Vergleich zweier ArrayLists mit Ausgabe an dritte ArrayList Java Basics - Anfänger-Themen 5
G Klassen Vergleich zweier Klassen Java Basics - Anfänger-Themen 23
S Implementieren zweier Klassen Java Basics - Anfänger-Themen 5
P Ungerade Zahlen ausgeben lassen zwischen Spannweite zweier eingegeben zahlen Java Basics - Anfänger-Themen 6
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
N Methoden Methode zum Vergleich zweier Geburtstage Java Basics - Anfänger-Themen 5
K Multiplikation zweier Matrizen Java Basics - Anfänger-Themen 23
D Zusammenfassen zweier Programme Java Basics - Anfänger-Themen 3
B Kreuzprodukt zweier Vektoren (Erste Java Aufgabe - Hilfestellungen und Tips erwünscht) Java Basics - Anfänger-Themen 4
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
N Vergleich zweier String Arrays scheitert Java Basics - Anfänger-Themen 3
C Proportionale Abnahme zweier Werte Java Basics - Anfänger-Themen 4
O ArrayListe sortieren anhand zweier Parameter Java Basics - Anfänger-Themen 4
C Inhalte zweier Vektoren vergleichen Java Basics - Anfänger-Themen 3
T Programm, das die Differenz zweier Daten ausgibt Java Basics - Anfänger-Themen 4
S Ermittlung des GGTs zweier Werte Java Basics - Anfänger-Themen 5
Y Erste Schritte Verknüpfung zweier JAVA-Codes Java Basics - Anfänger-Themen 8
A Methoden Gedanken Anstöße zur Realisierung zweier Ideen (Grafisch Sekunden zählen und Frameaufteilung) Java Basics - Anfänger-Themen 18
I Einlese Abfrage zweier Variablen in einem Fenster Java Basics - Anfänger-Themen 6
A Durchschnitt zweier Mengen berechnen Java Basics - Anfänger-Themen 3
G Kombination zweier Befehle (Preis festlegen & Rabatt berechnen) Java Basics - Anfänger-Themen 3
W Methoden größe zweier tiere vergleichen Java Basics - Anfänger-Themen 15
K Schnitt zweier Ebenen ergibt Gerade Java Basics - Anfänger-Themen 10
L vergleich zweier texte Java Basics - Anfänger-Themen 18
B Vergleich zweier Objekte durch "Hashfunktion" Java Basics - Anfänger-Themen 12
J Addition zweier Zahlen Java Basics - Anfänger-Themen 9
J Dimensionen zweier Arrays vergleichen Java Basics - Anfänger-Themen 4
U Größenvergleich / Dimensionsvergleich zweier Matrizen Java Basics - Anfänger-Themen 2
N Datenaustausch zweier rechner Java Basics - Anfänger-Themen 4
turmaline Gleicheit zweier Listen Java Basics - Anfänger-Themen 12
S Print Methode zweier "Classes" kombinieren Java Basics - Anfänger-Themen 2
C Dateiinhalt zweier Dateien auf Gleichheit prüfen Java Basics - Anfänger-Themen 3
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
W Unterschiede zweier Dateien herauslesen Java Basics - Anfänger-Themen 7
P Unterschiede zweier System.in Varianten Java Basics - Anfänger-Themen 3
I Abhängigkeiten zweier Klassen Java Basics - Anfänger-Themen 25
G Vergleich zweier Arrays Java Basics - Anfänger-Themen 8
D Eine Nachkommazahl zweier Double vergleichen Java Basics - Anfänger-Themen 4
N sortieren zweier abhängiger array listen Java Basics - Anfänger-Themen 12
S Addieren zweier Arrays Java Basics - Anfänger-Themen 10
T ermittlung des minimus zweier eingegebener werte Java Basics - Anfänger-Themen 7
G größere zweier zahlen ermitteln und ausgeben Java Basics - Anfänger-Themen 6
G Summe zweier doubles falsch? Java Basics - Anfänger-Themen 10
I Kollision zweier Rechtecke Java Basics - Anfänger-Themen 9
H Genauigkeit beim Multiplizieren zweier Zahlen Java Basics - Anfänger-Themen 2
K Vergleich zweier Objekte in einer HashMap Java Basics - Anfänger-Themen 6
B Zusammenspiel zweier JFrames Java Basics - Anfänger-Themen 2
A Schnitt zweier Rechtecke ermitteln Java Basics - Anfänger-Themen 2
N Vergleich zweier Elemente verschiedener Vectoren Java Basics - Anfänger-Themen 2
G Vergleich zweier 'long'-Werte. Problem! Java Basics - Anfänger-Themen 6
T Inhalte zweier Variablen tauschen Java Basics - Anfänger-Themen 18
U Maximum zweier Zahlen ermitteln Java Basics - Anfänger-Themen 7
N Den Inhalt zweier Strings (Zahlen) addieren Java Basics - Anfänger-Themen 5
S maximum zweier Zahlen Java Basics - Anfänger-Themen 1
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
H Alle Geraden zahlen bis 10 ausgeben Java Basics - Anfänger-Themen 11
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
F Aus geraden eine Kurve machen Java Basics - Anfänger-Themen 6
B Array via Schleife mit ungeraden bzw geraden Zahlen füllen Java Basics - Anfänger-Themen 7
R Winkel berechnen bzw. Geraden sortieren Java Basics - Anfänger-Themen 33
L Array: Summe aller geraden und ungeraden Zahlen ermitteln Java Basics - Anfänger-Themen 9
J Erste Schritte Steigung einer Geraden Java Basics - Anfänger-Themen 1
N Schnitt Geraden Java Basics - Anfänger-Themen 11
O 2D Matrix befüllen mit geraden Zahlen!? Java Basics - Anfänger-Themen 14
Z Punkte, Koordinanten, Geraden zeichnen lassen Java Basics - Anfänger-Themen 8
G Zeichnen einer Geraden im JFrame Java Basics - Anfänger-Themen 7
kulturfenster Probleme beim Zeichnen einer Geraden Java Basics - Anfänger-Themen 8
W Berechnung verschiedener Eigenschaften von Geraden Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben