Blaubart: Schnittpunkte ermitteln

Beitrag lesen

Tach.

Eine Gerade a, die durch die Punkte A1 und A2 geht.
z.b. von links oben nach rechts unten. A1 wäre startwert, wobei A2 der Endwert wäre.

Genau. Allerdings haben Geraden gar keine Start- oder Endpunkte. Aber da Du ja vermutlich eh Strecken zeichnest, geht das schon in Ordnung. ;)

Jeder Punkt wird jeweils durch Koordinaten x (horizontal) und y (vertikal) beschrieben.

Also hiesse der Satz aufgelöst mit beispielzahlen:
Eine Gerade a, die durch die Punkte 10|10 und 90|90 geht

Ja, zum Beispiel.

Eine Hilfsfunktion cr(), die zwei Punkte A und B übergeben bekommt.

function cr (A, B) {
    return A.x * B.y - A.y * B.x;
}

Wie muss ich diese Synatx verstehen? Auf PHP gemünzt hiesse der . zwichen A.x eine verbindung und ergäbe z.B: "40x" als string. Oder dient es mir nur als hinweis darauf welchen A-Schlüssel ich brauche?

Letzteres. Es sollte kein PHP sein, sondern nur die Koordinaten der Punkte A und B bezeichnen.

Ich übergebe also A und B. A und B sind jeweils x|y Werte... Dies müssten dann z.B. Arrays sein. Ich übergebe also A=Array(10,10); und B=Array(90,90);

Dann hiesse der Return:
return A[0] * B[1] - A[1] * B[0];

Ja, richtig. Ob Du das nun als Array in PHP realisierst, Dir eine Klasse "Punkt" schreibst oder sonstwas, bleibt Dir überlassen.

Also ist das erste Fragment eine art:
(A2-A1) = (Array(x,y) - Array(x,y))
Aber das kann doch nicht so erreicht werden...

Wie gesagt: das war kein PHP-Code. Diese Subtraktion nun computerverständlich umzusetzen, ist Deine Aufgabe. :) Die x-Koordinate des einen Punktes von der x-Koordinate des anderen Punktes abziehen und analog für die y-Koordinaten.

Damit mußt Du nur aufpassen, wenn beide Gerade parallel verlaufen, sich also nicht schneiden. Dann gibt es nämlich eine Division durch Null. Diesen Fall also vorher abfangen, sonst geht Dein Programm krachen!

Dies kann erreicht werden indem ich dies nur anwende bei Geraden von denen ich weiss dass sie einen Schnittpunkt generieren müssen.

Du könntest auch einfach den Nennerterm (unterm Bruchstrich) vorher ausrechnen und entsprechend reagieren, wenn er Null ist. Ansonsten berechnest Du den Zählerterm (überm Bruchstrich) und dividierst einfach duch den vorher ermittelten Wert.

--
Once is a mistake, twice is Jazz.