Thema: FreePascal Vektoriales Rechnen

Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#17

AW: Vektoriales Rechnen

  Alt 13. Mai 2017, 17:38
nur verstehe ich die Funktion nicht ganz und verwende sehr ungern Code den ich nicht versthe... Könntest du mir erklären, was dort jeweils passiert?
Das ist löblich. Ich versuche mal den groben Ansatz zu erklären, weil ich mich noch daran erinnern kann, dass ich damals in der Mittelstufe auch ziemlich daran hing, da wir noch keine Vektorrechnung hatten.

Man kann die Lösung in zwei Teile untergliedern
(1) Tu so als wären die Strecken Geraden (also unendlich lang). Berechne die Schnittpunkte der Geraden.
(2) Prüfe, ob der Schnittpunkt tatsächlich auf den Strecken liegt.

(1) Zuerst betrachten wir mal nur die Schnittpunkte von Geraden (also unendlich langen Strecken), weil der Fall einfacher ist. Man kann eine Gerade durch zwei Punkte und einen Parameter darstellen:

Gerade g: g(t) = g0*(1-t) + g1*t
Gerade h: h(s) = h0*(1-s) + h1*s

g0, g1: Stützpunkte von Gerade g (Vektoren)
h0, h1: Stützpunkte von Gerade h (Vektoren)
t, s: Parameter (Skalare)

Du kannst dir vorstellen, dass man, wenn man für t und s beliebige Werte einsetzt, alle Punkte auf den jeweiligen Geraden bekommt.

Den Schnittpunkt erhält man jetzt einfach, indem man g = h setzt. Da bekommt man ein Gleichungssystem heraus, das man dann auflösen muss. Wie man sich denken kann, gibt es einen Fall, in dem das Gleichungssystem nicht bzw. nicht eindeutig lösbar ist, nämlich wenn g und h parallel sind (führt in der Praxis zu einer Division durch 0). Diesen Fall muss man abfangen.

Andernfalls erhält man die Lösung in Form einer Formel für t bzw. s. Wenn man den Wert in die oben gegebene Definition für g bzw. h einsetzt, erhält man den Schnittpunkt.

(2) Wie prüfen wir jetzt, ob der Schnittpunkt tatsächlich auf den Strecken liegt? Nun, schauen wir uns mal an, was passiert, wenn wir für t den Wert 0 oder den Wert 1 einsetzen.

g(0) = g0*(1-0) + g1*0 = g0
g(1) = g0*(1-1) + g1*1 = g1

Aha! Das heißt, 0 und 1 ergeben genau die Endpunkte der Strecke. Und nicht nur das, alle Werte zwischen 0 und 1 ergeben genau die Punkte zwischen den Endpunkten.

D.h. man muss nur prüfen, ob t im Bereich [0,1] liegt, und ob s im Bereich [0,1] liegt. Wenn beides wahr ist, dann schneiden sich die Strecken im berechneten Punkt. Andernfalls schneiden sie sich nicht.

---

Ich hoffe, der grobe Ansatz ist so verständlich. Ich hatte jetzt keine Lust, das hier alles im Detail aufzulösen. Du kannst ja mal versuchen, das nachzurechnen. Wenn du dabei Fragen hast, kannst du sie hier stellen.

Was bedeutet Matrize
Der Singular ist eigentlich "Matrix". Ist hier einfach nur eine kompakte Schreibweise für ein lineares Gleichungssystem.

Geändert von Namenloser (13. Mai 2017 um 17:40 Uhr)
  Mit Zitat antworten Zitat