Heureka! Ich habs, und es schaut erstmal massig aus, ist aber letztlich garnicht SO schwer gewesen. Für alle die mal suchen:
Gerade := G = A + s*B
Funktion := F = X*t³ + Y*t² + Z*t + W
A, B, X, Y, Z, W element von R2 (Indizes im Folgenden: A0 = x-Koordinate von A; A1 = y-Koordinate von A)
s, t element von R
F = G <=> F-G = 0
F-G = 0 <=> -A + -B*s + X*t³ + Y*t² + Z*t + W = 0
In Koordinaten aufgesplittet:
Gleichung 1: -A0 + -B0*s + X0*t³ + Y0*t² + Z0*t + W0 = 0
Gleichung 2: -A1 + -B1*s + X1*t³ + Y1*t² + Z1*t + W1 = 0
s durch t ausdrücken. Es muss die Gleichung dafür gewählt werden, in der Bx <> 0 ist. Diese gibt es, sonst wäre die Gerade keine Gerade (Richtungsvektor wäre (0, 0)) Hier für den Fall dass B0 <> 0:
s := (-A0 + X0*t³ + Y0*t² + Z0*t + W0) / B0
Einsetzen in Gleichung 2:
-A1 + X1*t³ + Y1*t² + Z1*t + W1 + (-B1/B0)*(-A0 + X0*t³ + Y0*t² + Z0*t + W0) = 0
Umformen und Gruppieren nach Potenzen von t ergibt:
((X1*B0-B1*X0)/B0)*t³ + ((Y1*B0-B1*Y0)/B0)*t² + ((Z1*B0-B1*Z0)/B0)*t + (B0*(W1-A1)+B1*(A0-W0))/B0 = 0
Da B0 nur ein Skalar auf dem gesamten Term ist, kann er komplett für die Nullstellenberechnung ausgelassen werden:
(X1*B0-B1*X0)*t³ + (Y1*B0-B1*Y0)*t² + (Z1*B0-B1*Z0)*t + B0*(W1-A1)+B1*(A0-W0) = 0
Das lässt sich dann vergleichsweise einfach mit der Cardanischen Formel lösen, so dass man 1-3 Werte für t bekommt.
Die entsprechenden s erhält man duch Einsetzen der t in obige Relation: s := (-A0 + X0*t³ + Y0*t² + Z0*t + W0) / B0
Das wichtigste ist eigentlich nur, dass man die Variante für das Bx <> 0 nimmt, sonst knallt es natürlich
Chacka!
Danke euch!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)