Hallo Cleo,
das klingt nach Mathe- oder Informatik- Hausaufgabe. Wenn ich Dich richtig verstehe, dann suchst Du eine Funktion der Art
Code: Alles auswählen
def liegt_punkt_auf_geraden(P1, P2, PX):
#P1, P2 = Endpunkte der Geraden, PX = gesuchter Punkt
Alles, was die anderen Forenteilnehmer gesagt haben, ist auf alle Fälle zu beachten, ich zähle es noch einmal kurz auf:
- Einrückungen um 4 Leerzeichen (pythonspezifische Festlegung)
- Punkte, die senkrecht übereinander liegen, bekommst Du mit Deinem Ansatz mx+n nicht, da m dann unendlich wäre
- wenn Du mit reellen Zahlen arbeitest, dann ist 1.5 * 1.5 eben nicht genau 2.25. Das liegt daran, dass die interne Repräsentation einer Zahl irgendwo Schluss machen muss. Pi ist ja auch nicht 3,14 oder 3,14159265 sondern viel länger. Du kannst also streng genommen nur einen Punkt finden, der dicht genug an der Geraden liegt.
Jetzt zum Mathematischen Teil:
Bleiben wir mal bei dem der Version y = mx + n, dann steht die Frage, wie man das m und n aus zwei Punkten herausbekommt.
Ich habe die x- bzw. y- Werte hier mal mit P1x, P1y, P2x, P2y bezeichnet
m ist der Anstieg, wenn Du Dir die beiden Punkte aufmalst, wirst Du leicht erkennen, dass m = (P2y-P1y)/(P2x-P1x) ist. Hier wird auch klar, warum das nicht funktioniert, wenn P2x und P1x identisch sind. Du musst also in Deine Funktion in eine entsprechende Fallunterscheidung einbauen, die diesen Fall gesondert prüft.
n ist Dein y- Abschnitt.
Da Du ja m inzwischen kennst, kannst Du einen der beiden bekannten Punkte einsetzen, beispielsweise P1, dann gilt P1y = m * P1x + n
Das musst Du nun nach n umstellen und hättest das auch.
Jetzt solltest Du alle Bausteine haben, um Deine Funktion anpassen zu können. Versuch es bitte aus eigener Kraft, sonst lernst Du ja nichts. Aber wenn Du weitere Fragen hast, dann stelle sie ruhig.
ps: Fast hätte ich es vergessen: Was genau heißt auf der Linie liegen? Auf der geraden durch die beiden Punkte oder auf der Strecke zwischen den beiden Punkten? Im letzteren Fall musst Du auch noch ausschließen, dass der Punkt zwar auf der Geraden liegt, aber eben nicht zwischen den beiden Punkten.