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
Für zwei Geraden brauchst du aber vier Punkte (zwei pro Gerade) ...
Edit: und wenn du die hast stellst du zwei Geradengleichungen auf f(x) und g(x),
diese setzt du gleich, löst nach x auf, berechnest x und setzt dies in eine der Gleichungen ein um daraus y auszurechnen.
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...
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);
}
}
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));
}
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
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.
Wieso ist berechneSchnittpunkt eigentlich richtig? Ich bin dann faul gewesen - und habe Wolframalpha um hilfe gefragt.
Aber es ist schon so, dass mir Gleichungen ab einer bestimmter Länge schwer für mich sind.
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. Also Eure 1 könnt ihr auch so bekommen, ohne das Geblubber zu verstehen.
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).
Sonst verwirrt mich das Thema doch schon sehr.
Im Grundsatz ist es wurst, wie viele Komponenten/Dimensionen A und B (und C und D) haben. Mit drei Komponenten wäre es der/ein Punkt einer Geraden im dreidimensionalen Raum!
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.
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.