|
Autor |
Lage eines Punktes bezüglich einer gerichteten kubischen Bezier-Kurve |
|
exellian
Junior  Dabei seit: 13.02.2022 Mitteilungen: 5
 | Themenstart: 2023-01-26
|
Angenommen man hat eine gerichtete kubische Bezierkurve, wie in dem folgendem Bild dargestellt (Startet bei A, endet bei D und hat die Kontrollpunkte B und C):
https://matheplanet.com/matheplanet/nuke/html/uploads/c/55391_Screenshot_2023-01-26_202646.png
Wie kann man feststellen ob der Punkt P rechts oder links bezüglich der Richtung der Kurve liegt. Also im Bild dargestellt: im blauen oder im braunen Bereich liegt. Die Richtung ist dabei einfach immer dadurch gegeben, dass es einen Startpunkt und einen Endpunkt der Kurve gibt. In diesem Fall A und D.
Ich würde mich mich über Hilfe freuen, da ich dazu fast nichts im Internet gefunden habe!
|
Profil
|
nzimme10
Senior  Dabei seit: 01.11.2020 Mitteilungen: 2070
Wohnort: Köln
 | Beitrag No.1, eingetragen 2023-01-26
|
\(\begingroup\)\(\renewcommand{\i}{\mathrm{i}}
\renewcommand{\Re}{\operatorname{Re}}
\renewcommand{\Im}{\operatorname{Im}}
\newcommand{\e}{\mathrm{e}}
\renewcommand{\d}{\mathrm{d}}
\renewcommand{\dd}{\ \mathrm d}
\newcommand{\ddz}{\frac{\mathrm{d}}{\mathrm{d}z}}
\newcommand{\ddw}{\frac{\mathrm{d}}{\mathrm{d}w}}
\newcommand{\ddt}{\frac{\mathrm{d}}{\mathrm{d}t}}
\newcommand{\opn}{\operatorname}
\renewcommand{\vec}[3]{\begin{pmatrix} #1 \\ #2\\ #3\end{pmatrix}}
\newcommand{\rot}{\opn{rot}}
\newcommand{\div}{\opn{div}}\)
Hallo,
eine recht naive Möglichkeit:
Zunächst versehen wir $\mathbb R^2$ mit seiner normalen Orientierung. Wenn die Kurve durch eine Parametrisierung $\gamma\colon [0,1]\to \mathbb R^2$ gegeben ist, dann bestimmen wir zunächst $t_0\in [0,1]$ derart, dass der Abstand von $P$ und $\gamma(t_0)$ minimal ist.
Anschließend betrachten wir den Tangentialvektor $\gamma'(t_0)$ und den Vektor $P-\gamma(t_0)$. Die stehen natürlich senkrecht zueinander.
Die Determinante der Matrix mit den Spalten $P-\gamma(t_0)$ und $\gamma'(t_0)$ (in dieser Reihenfolge) liefert uns dann die Antwort auf deine Frage. Sie ist positiv, wenn $P$ rechts von der Kurve liegt und negativ, wenn $P$ links davon liegt.
Das funktioniert natürlich nur, wenn die $x$-Koordinate von $P$ zwischen denen des Anfangs- und Endpunkts der Kurve liegt. (Durch eine kleine Modifikation lässt sich das aber natürlich beheben).
LG Nico\(\endgroup\)
|
Profil
|
exellian
Junior  Dabei seit: 13.02.2022 Mitteilungen: 5
 | Beitrag No.2, vom Themenstarter, eingetragen 2023-01-27
|
\quoteon(2023-01-26 23:06 - nzimme10 in Beitrag No. 1)
Hallo,
eine recht naive Möglichkeit:
Zunächst versehen wir $\mathbb R^2$ mit seiner normalen Orientierung. Wenn die Kurve durch eine Parametrisierung $\gamma\colon [0,1]\to \mathbb R^2$ gegeben ist, dann bestimmen wir zunächst $t_0\in [0,1]$ derart, dass der Abstand von $P$ und $\gamma(t_0)$ minimal ist.
Anschließend betrachten wir den Tangentialvektor $\gamma'(t_0)$ und den Vektor $P-\gamma(t_0)$. Die stehen natürlich senkrecht zueinander.
Die Determinante der Matrix mit den Spalten $P-\gamma(t_0)$ und $\gamma'(t_0)$ (in dieser Reihenfolge) liefert uns dann die Antwort auf deine Frage. Sie ist positiv, wenn $P$ rechts von der Kurve liegt und negativ, wenn $P$ links davon liegt.
Das funktioniert natürlich nur, wenn die $x$-Koordinate von $P$ zwischen denen des Anfangs- und Endpunkts der Kurve liegt. (Durch eine kleine Modifikation lässt sich das aber natürlich beheben).
LG Nico
\quoteoff
Vielen Dank!
Das klingt schonmal ziemlich hilfreich und ich werde es gleich mal ausprobieren ob es klappt. Das einzige was ich nicht ganz verstehe warum das Vorzeichen der Determinante dann zwischen dem Tangentialvektor und dem senkrechten dazu, die richtige Richtung angibt. Das liegt vielleicht auch daran, dass ich Determinanten noch nie ganz verstanden habe, aber egal.
|
Profil
|
go361
Aktiv  Dabei seit: 21.06.2022 Mitteilungen: 57
 | Beitrag No.3, eingetragen 2023-01-27
|
\quoteon(2023-01-26 20:45 - exellian im Themenstart)
https://matheplanet.com/matheplanet/nuke/html/uploads/c/55391_Screenshot_2023-01-26_202646.png
\quoteoff
Das Bild ist von Inigo Quilez zum Thema Signed Distance Functions, aber ich kann auf seiner Seite nur Artikel zu SDFs von quadratischen Beziers finden. Wo hast du das Bild denn her? Oder versuchst du seinen SDF Shadertoy Code an kubische Beziers anzupassen?
In beiden Fällen freue ich mich über einen Link, da ich so etwas auch brauche/gern hätte.
|
Profil
|
exellian
Junior  Dabei seit: 13.02.2022 Mitteilungen: 5
 | Beitrag No.4, vom Themenstarter, eingetragen 2023-01-28
|
\quoteon(2023-01-27 08:52 - go361 in Beitrag No. 3)
\quoteon(2023-01-26 20:45 - exellian im Themenstart)
https://matheplanet.com/matheplanet/nuke/html/uploads/c/55391_Screenshot_2023-01-26_202646.png
\quoteoff
Das Bild ist von Inigo Quilez zum Thema Signed Distance Functions, aber ich kann auf seiner Seite nur Artikel zu SDFs von quadratischen Beziers finden. Wo hast du das Bild denn her? Oder versuchst du seinen SDF Shadertoy Code an kubische Beziers anzupassen?
In beiden Fällen freue ich mich über einen Link, da ich so etwas auch brauche/gern hätte.
\quoteoff
Also das Bild habe ich von diesem Shadertoy-shader https://www.shadertoy.com/view/4sKyzW
Dieser implementiert bereits ein SDF für kubische Bezierkurven.
Das Problem mit dem Code war nur, dass das Vorzeichen des SDFs oft hin und her flippt und nicht immer auf der rechten Seite der Kurve ist. Deshalb habe ich diese Frage formuliert und die Lösung von Nico implementiert und es scheint zu funktionieren: https://www.shadertoy.com/view/dlfXWN
LG Max
|
Profil
|
go361
Aktiv  Dabei seit: 21.06.2022 Mitteilungen: 57
 | Beitrag No.5, eingetragen 2023-01-28
|
\quoteon(2023-01-28 04:28 - exellian in Beitrag No. 4)
Also das Bild habe ich von diesem Shadertoy-shader https://www.shadertoy.com/view/4sKyzW
Dieser implementiert bereits ein SDF für kubische Bezierkurven.
Das Problem mit dem Code war nur, dass das Vorzeichen des SDFs oft hin und her flippt und nicht immer auf der rechten Seite der Kurve ist. Deshalb habe ich diese Frage formuliert und die Lösung von Nico implementiert und es scheint zu funktionieren: https://www.shadertoy.com/view/dlfXWN
LG Max
\quoteoff
Sehr cool, danke!
|
Profil
|
exellian hat die Antworten auf ihre/seine Frage gesehen. exellian hat selbst das Ok-Häkchen gesetzt. | exellian wird per Mail über neue Antworten informiert. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|