Position eines Punkts relativ zu einer Bezier-Kurve

8

Ich habe eine Bezier-Kurve mit 4 Punkten. Ich muss wissen, ob ein Punkt auf der linken oder rechten Seite der Bezier-Kurve ist. Können Sie mir einen Algorithmus vorschlagen?

Bearbeiten: Ich bin mir sicher, dass die Art und Weise, wie ich die Bezier-Kurve erzeuge , keine Schleifen bilden würde.

Spätere Bearbeitung Ich erkannte, dass mein erstes Problem gelöst werden konnte, ohne die relative Position zu verwenden. Als ich diese Frage gestellt habe, dachte ich, dass es eine mathematische Formel für die relative Position gibt, ähnlich wie beim Prüfen, ob ein Punkt im Inneren eines Kreises ist. Es scheint, dass dies nicht möglich ist. Also werde ich die Antwort akzeptieren, die eine zeiteffiziente Lösung vorschlagen wird.

    
Ionel Bratianu 28.05.2009, 12:55
quelle

5 Antworten

5

Sie können den nächsten Punkt auf der Bezier-Kurve mit einem ziemlich einfachen Algorithmus bestimmen (bezogen auf k-Unterteilung. DeCastlejus Algorithmus.) Sehen Sie sich die Grafik-Edelsteine ​​an, wenn Sie Besonderheiten benötigen.

An diesem Punkt können Sie selbst mit Schleifen die Seitenneigung bestimmen, indem Sie bestimmen, ob der Vektor zu Ihrem getesteten Punkt vom nächsten Punkt aus auf der linken Seite des Vektors liegt, der entlang der Kurve verläuft (Geschwindigkeit? - nicht sicher der richtige Begriff hier ...) der Bezier an der nächsten Stelle, die Sie bestimmt haben.

Sie können -das- erhalten, indem Sie das Produkt der beiden Vektoren kreuzen. Negativ oder Positiv bestimmt die Händigkeit und auf welcher Seite der Linie Sie sich befinden.

Natürlich wird die Sidness in einer Schleife so definiert, als ob Sie ein Auto wären, das die Linie hinunter fährt, würden Sie aus dem rechten oder linken Fenster an der Stelle sehen, an der Sie vorbeikommen ... Nicht, wenn Sie es tun die rechte oder linke der ganzen Bezier Squiggle. Es hängt also davon ab, wie Sie "Sidness" definieren.

Tut mir leid, wenn meine Bedingungen nicht stimmen. Es war eine Weile her, seit ich mit Bezier etwas zu tun hatte

Es wäre einfacher, ein Bild zu zeichnen;)

    
Jeremy White 29.05.2009, 08:14
quelle
1

Wenn Sie nur möchten, dass Ihr Objekt der Kurve folgt (wie Sie in Ihrem Kommentar sagen), warum bewegen Sie Ihr Objekt nicht einfach mit der parametrischen Gleichung? Siehe diesen Artikel

    
rockeye 28.05.2009 13:28
quelle
1

Hier ist Mathe für die kubische und quadratische Bezier-Kurve-Implizierung. p>     

Mykhailo Parfeniuk 20.12.2009 13:16
quelle
0

Ich kann mich zu dieser späten Stunde nicht mehr an die Mathematik erinnern, aber Sie würden wahrscheinlich einen Unterteilungsalgorithmus für die Kurve verwenden, um ihn schrittweise zu verfeinern, bis die Segmente so gerade sind, dass Sie sie als Liniensegmente für die Zwecke behandeln können deiner Entschlossenheit.

Sie können eine schnellere Antwort erhalten, wenn Sie die Begrenzungs-Polyeder der Kurvenverfeinerungen verwenden, um zu bestimmen, an welchem ​​Punkt sich Ihr "Punkt" außerhalb aller Polyeder befindet, und dann sofort zu den Liniensegmenten abzuflachen.

    
jerryjvl 28.05.2009 13:05
quelle
0

Unter der Annahme, dass der Punkt auf die Kurve beschränkt ist, müssen Sie einen der Anker als Anfang und den anderen als Ende definieren und dann einen Punkt berechnen, der zur Kurve gehört und sich in der Mitte (der Hälfte der Länge) befindet So können Sie sagen, ob der Punkt zwischen dem Anfang und der Mitte oder der Mitte und dem Ende liegt.

Ist das, was du willst oder bin ich total verloren?

    
coma 29.05.2009 07:57
quelle