[ascoders] distanz punkt bezierKurve

  • From: "Andre Michelle" <am@xxxxxxxxxxxxxxxxxx>
  • To: <ascoders@xxxxxxxxxxxxx>
  • Date: Mon, 30 Dec 2002 17:55:48 +0100

hallo,

mal was Deftiges :o)
Ich brauche jemanden, der sich noch an Mathematik ( Analysis ) errinnern
kann.
Theoretisch durchkaemmt habe ich das Ganze.
Die Loesung liegt auf der Hand, aber die Mathematik
laesst mich im Stich.

Zum Einsteigen das hier:
http://andre-michelle.com/bin/normale.swf
http://andre-michelle.com/bin/normale.fla

Die Idee ist, dass der kuerzeste Abstand zur Bezierkurve
sich ueber die Normale zum Punkt finden laesst.

Bezierkurve:
var p0 = { x: -250, y: 100 };
var p1 = { x: 0, y: -300 };    // controlpoint
var p2 = { x: 250, y: 120 };

Ueber den Parameter 't' von 0 bis 1 erhalte ich x,y Coordinaten auf der
Kurve ueber:

 x = ( 1 - t ) * ( 1 - t ) * p0.x + 2 * t * ( 1 - t ) * p1.x + t * t * p2.x;
 y = ( 1 - t ) * ( 1 - t ) * p0.y + 2 * t * ( 1 - t ) * p1.y + t * t * p2.y;

Ueber die erste Herleitung des Casteljau Algorithmus erhalte ich die
Tangente im berechneten Punkt:

Hilfspunkt:
 c = { x: ( 1 - t ) * p1.x + t * p2.x , y: ( 1 - t ) * p1.y + t * p2.y };

Vektor Tangente:
 dx = c.x - x;
 dy = c.y - y;

Laenge des Vektors:
 d = Math.sqrt ( dx * dx + dy * dy );

Einheitsvektor:
 vx = dx / d;
 vy = dy / d;

Normalen Vektor:
 nx = vy;
 ny = -vx;

Schoen. Was ich brauche ist eine Formel,
die nach 't' aufgeloest, mir den 't' Wert liefert,
der eine Normale durch den Punkt, dessen Abstand
ich bestimmen will, zurueckgibt.

also:

t = Formel ( Pdist , P0 , P1 , P2 );

Das muss moeglich sein, aber mein MatheAbi ist 10 Jahre her :o)

Wer kann helfen ?

P.S. Das Ergebnis ist sicher interessant. Es liesse sich mit ungeheuerer
Performance
exakte Kollisionsabfragen mit Bezierkurven herleiten.

Meine ersten Versuche in die Richtung findet ihr auf meiner Webseite,
allerdings habe ich dort die Kurve in 'n' Liniensegmente unterteilt.

--
andre michelle

extrajetzt
http://www.extrajetzt.com
flashblog:
http://www.andre-michelle.com


------------------------------------------------------
Archiv   : //www.freelists.org/archives/ascoders/
Optionen : //www.freelists.org/list/ascoders
------------------------------------------------------

Other related posts: