Shit ich glaub ich habs falsch verstanden. Falls ein Geradensegment eine Strecke sein soll, ist mein Ansatz unvollständig..
Ansonsten hier weiter lesen:
Zum Einstieg ein bischen Mathe:
Lagebeziehung von Geraden (Ausschnitt)
Definition: Zwei Geraden haben nur dann einen Schnittpunkt, wenn die Steigung beider Geraden unterschiedlich ist.
Beispiel:
Code:
y1 = 4x + 5
y2 = 4x + 2
// Kein Schnittpunkt
y3 = 4x + 5
y4 = 1x + 2
// Schnittpunkt
Als Code:
Code:
if (m1 != m2)
Console.WriteLine("Schnittpunkt vorhanden");
else
Console.WriteLine("KEIN Schnittpunkt vorhanden");
Das stellt uns nun vor das Problem: Wie bekommen wir denn die Steigung der Geraden?
Gerade durch zwei Punkte
Gegeben:
Zwei Punkte:
A(4, 5) und
B(6, 9)
Gesucht:
Geradengleichung der Form
aus A und B
An dieser Stelle könnten wir ein Gleichungssystem lösen, wir könnens aber auch lassen.
Code:
dy = b_y - a_y
dx = b_x - a_x
m = dy / dx
Gelöst wäre das also
Code:
dy = 9 - 5 = 4
dx = 6 - 4 = 2
m = 4 / 2 = 2
Nun haben wir die Steigung einer Geraden. Bleibt noch die Verschiebung b:
Dazu setzen wir einfach alles in die Normalform ein, was wir bisher haben:
Code:
y = m * x + b
5 = 2 * 4 + b
// Nach b auflösen
5 = 8 + b
5 - 8 = b
-3 = b
Wenn wir das nun in ein Programm übersetzen wollen, müssen wir es generisch lösen. d.H. wir müssen die Formel nach b umstellen, aber nur mit Variablen.
Und das sieht dann so aus:
Code:
y = m*x + b
y - m * x = b
Schnittpunkt zweiter Geraden berechnen
Definition: Der Schnittpunkt zweier Geraden ist genau der Punkt, an dem beide Funktionen den gleichen Y-Wert besitzten.
Wir haben also zwei Funktionen
Code:
y1 = 4x + 5
y2 = 1x + 2
Und wenn sich folgendes ergibt, ist der Schnittpunkt gefunden:
Code:
y1 = y2
4x + 5 = 1x + 2
Gesucht ist hier der passende X-Wert. Also stellen wir nach X um.
Code:
4x + 5 = 1x + 2 | -1x
3x + 5 = 2 | -5
3x = -3 | :3
x = -1
Wie man das Ganze generisch umstellt, habe ich ja oben schon gezeigt, daher solltest du das hier eigentlich hinbekommen. Ansonsten: Schreib auf was du denkst und ich (oder jemand anderes) korrigiere das.
Jetzt haben wir unseren X-Wert, den können wir jetzt in eine der beiden Geradengleichungen einsetzen und bekommen den passenden Y-Wert.
Code:
4x + 5 mit x = -1
4 * -1 + 5 = 1
// oder
1x + 2 mit x = -1
1 * -1 + 2 = 1
Die "große" Kunst ist nun, das ganze in ein Programm zu übersetzen. Generell musst du dazu alles generisch lösen, du kannst ja im Programm nicht umstellen ... also kannst du schon ... aber das müsstest du dann programmieren.
Wie dir vielleicht aufgefallen ist, lässt sich fast alles nur mit den Parametern M und B lösen. Schritt eins ist also diese beiden Parameter zu bestimmen und Schritt zwei dann diese in die jeweiligen Formeln einzusetzen.
Ich hab mit Absicht nicht die gesamte Lösung als Code hingeschrieben. Wenn du Probleme bei der Umsetzung hast, schreib am Besten ganz genau was du versucht hast und was deine Gedanken dahinter waren bzw was dein Problem ist. Ich muss sagen ich find die Aufgabe schon recht hart für ne Programmieren Hausaufgabe. Da sind selbst unsere Aufgaben in der Uni einfacher.
(Und wenn du kein Interesse mehr am selbst lösen hast, sondern lieber die ganze Lösung willst, schreib das auch klar hin ;D ).
Vielleicht geh ich das ganze auch viel zu komplex an. Vielleicht hat C# schon Funktionen für sowas?