Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: Schnitt von Gerade und Fkt. 3. Grades im R2

  Alt 10. Dez 2009, 16:11
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)
  Mit Zitat antworten Zitat