Autor Wątek: Pytania dotyczące krzywych Catmull-Rom.  (Przeczytany 2008 razy)

Offline Jakub27

  • Użytkownik

# Wrzesień 22, 2015, 22:40:21
Witam, od kilku dni się męczę z krzywymi Catmull-Rom w Unity 3d. Mój problem polega na tym, że nie mogę znaleźć przykładu jak obliczyć długość takiego odcinka oraz znormalizować prędkość ponieważ zauważyłem, że na różnych odcinkach prędkości są różne :/ Bardzo będę wdzięczny za jakąkolwiek pomoc bo obecnie to stoje przy projekcie w miejscu :(

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline koirat

  • Użytkownik

# Wrzesień 22, 2015, 22:49:31
Jedyne co mogę ci polecić to dyskretyzacja, czyli podział krzywej na n prostych segmentów. Kiedyś sam próbowałem obliczyć długość łuku krzywej sklejania a później próbowałem znaleźć rozwiązanie na necie.

I nie była to prosta matematyka, nawet nie wiem czy jest analityczne rozwiązanie tego zagadnienia.
« Ostatnia zmiana: Wrzesień 22, 2015, 23:13:09 wysłana przez koirat »

Offline Jakub27

  • Użytkownik

# Wrzesień 23, 2015, 00:06:38
Jeśli chodzi o mierzenie odległości to jeszcze takie rozwiązanie może być ale z prędkością już gorzej. Jeśli ktoś ma pomysł jak rozwiązać problem z prędkością niech pisze. Jeśli wiecie jak rozwiązać ten problem na innych krzywych typu (Np B-spline) to też mi pasuje.

Offline ArekBal

  • Użytkownik

# Wrzesień 23, 2015, 00:52:39
Ale Koirat dobrze pisze, znając długość odcinka, możesz z łatwością policzyć prędkość i na odwrót.
Jeśli do Warszawy z Pipidówy dolnej dojeżdżasz w 1 godzinę to z jaką prędkością jechałeś? No brakuje ci długości ;)

Sam będąc matematycznym noobem tez poszedł bym tym samym tropem co koirat i podzielił bym na N kwadrat odcinków i doliczał kolejne przy większej skali(jak masz punkty kontrolne zaraz przy sobie to nie ma co się bawić...no może poza pętlami...)

Oprócz tego, chcąc być bliżej właściwej długości policzył bym odległości dla różnych skal i wyznaczył przybliżoną długość właściwą na tej podstawie
« Ostatnia zmiana: Wrzesień 23, 2015, 00:55:13 wysłana przez ArekBal »

Offline grzegorz

  • Użytkownik

  • +1
# Wrzesień 23, 2015, 01:26:15
Prędkość można obliczyć przez policzenie długości pochodnej funkcji krzywej. Dzięki temu można uzyskać dokładną prędkość.
W ten sposób liczyłem prędkość przemieszczania się obiektów po krzywych Beziera.

Offline CheshireCat

  • Użytkownik

# Wrzesień 23, 2015, 17:38:46
Prędkość można obliczyć przez policzenie długości pochodnej funkcji krzywej. Dzięki temu można uzyskać dokładną prędkość.
W ten sposób liczyłem prędkość przemieszczania się obiektów po krzywych Beziera.

Dokładnie tak.
Dodam tylko, że krzywe parametryczne są często używane do definicji ruchu ponieważ łatwo kontrolować ich matematykę (np. gładkość) czy właśnie BANALNIE jest wyliczyć prędkość poruszania się.

Offline Jakub27

  • Użytkownik

# Wrzesień 23, 2015, 23:18:00
Skoro to takie banalne to może by ktoś zaprezentował owe rozwiązanie w dowolnym język programowania:) Dodam jeszcze, że nie chodzi mi o wyliczenie prędkości z jaką obiekt się porusza a nadanie temu obiektowi odpowiedniej stałej prędkość. Przeglądam różne stronki ale póki co nic konkretnego nie znalazlem.

Offline yarpen

  • Użytkownik

# Wrzesień 24, 2015, 04:45:54
Eberly napisal o tym dobry papier; http://www.geometrictools.com/Documentation/Documentation.html (Moving Along a Curve with Specified Speed)... Metoda z podzielem krzywej na odcinki jest nadal duzo prostsza (i daje sie prekalkulowac).

Offline Jakub27

  • Użytkownik

# Wrzesień 24, 2015, 15:38:32
@yarpen o dzięki za linka, muszę zapoznać się z tematem bo jest tego trochę. Ja znalazłem dość ciekawe wzory w tym PDFie http://z2.math.us.edu.pl/perry/glimpses/okruchy3.pdf w sumie nie ma mowy tam o prędkości ale może komuś się przyda :)

Offline koirat

  • Użytkownik

# Wrzesień 24, 2015, 15:59:29
Tak jeszcze drążyłem temat i znalazłem coś takiego.
http://www.malczak.linuxpl.com/blog/quadratic-bezier-curve-length/