Autor Wątek:  Ruch po krzywej Beziera  (Przeczytany 13787 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Ruch po krzywej Beziera
« dnia: 24 Lutego 2006, 23:51:56 »
No to dla ostudzenia klimatu i rozgrzania mózgownic małe zadanko.

Rownanie:
x+dx = pt1*px1 + 3*pt2*cpx1 + 3*pt3*cpx2 + pt4*px2, gdzie:
pt1 = (1 - t - dt)^3, pt2 = ((1 - t - dt)^2) * (t + dt), pt3 = (1 - t - dt) * ((t + dt)^2), pt4 = (t + dt)^3

Dane:
px1, cpx1, px2, cpx2, t, x, dx
Szukane:
dt

Zalozenia:
0 <= t <= 1
0 <= (t + dt) <= 1

Offline youBy

  • Deweloper
  • Wiadomości: 6163
  • Co tam?
    • Zobacz profil
    • Automat Weryfikujący Regulację i Lambdę
  • Otrzymane polubienia: 865
Ruch po krzywej Beziera
« Odpowiedź #1 dnia: 25 Lutego 2006, 10:35:19 »
dla pojazdu stojącego dt=0 żeby nie liczyć fizyki dla ozdób przytorowych :)
Xoov
Powyższy post wyraża jedynie opinię autora w chwili publikacji. Autor zastrzega sobie prawo do zmiany poglądów bez podawania przyczyny, jak również informowania o tym.

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Ruch po krzywej Beziera
« Odpowiedź #2 dnia: 25 Lutego 2006, 17:10:14 »
Nie youBy, to dla krzywych Beziera i wózków... Widzę że chyba nikomu nie chce się pogłówkować ;P

Ktoś może jednak poprzekształca?

Offline Poscikk

  • Wiadomości: 668
    • Zobacz profil
  • Otrzymane polubienia: 1
Ruch po krzywej Beziera
« Odpowiedź #3 dnia: 25 Lutego 2006, 18:01:23 »
Super ale o co w tym rownaniu chodzi? To jakies sinusy czy cossinusy :D
Ja wam zaraz dam do policzenia zadanie. Zmierzcie sobie czas rozwiazywania tego i napiszcie ile to wam zajelo:
* - mnożenie
46*4*4*6*1*4*3*21*8*6*46*12*151*216*4*564*53*0*432453*242*2424*24242*1212332*42422=x
x - wynik mnożenia

Za sterami 138 godzin 28 minut :)

Offline youBy

  • Deweloper
  • Wiadomości: 6163
  • Co tam?
    • Zobacz profil
    • Automat Weryfikujący Regulację i Lambdę
  • Otrzymane polubienia: 865
Ruch po krzywej Beziera
« Odpowiedź #4 dnia: 25 Lutego 2006, 18:13:59 »
wynik x=0
czas ~2 sekundy
Xoov
Powyższy post wyraża jedynie opinię autora w chwili publikacji. Autor zastrzega sobie prawo do zmiany poglądów bez podawania przyczyny, jak również informowania o tym.

Offline myszka

  • Wiadomości: 20
    • Zobacz profil
  • Otrzymane polubienia: 0
Ruch po krzywej Beziera
« Odpowiedź #5 dnia: 25 Lutego 2006, 22:03:25 »
Cytuj
Widzę że chyba nikomu nie chce się pogłówkować ;P


Nie o to chodzi ShaXbee, że nikomu nie chce się pogłówkować tylko zerknij jak to wyglada.
Gdy wszystko wypotęgujemy to otrzymamy "potężny" wielomian trzeciego stopnia z wyrazem wolnym różnym od zera wydaje mi się, że nie da rady pogrupować go w wspólczynniki niższego stopnia, metoda wynikajaca z  Twierdzenie Bezouta także nie ma zastosowania w tym przypadku.
Choć mimo tego moge napisac ,ze ten wielomian ma na pewno co najmiej jedno rozwiazanie jak każdy wielomian stopnia nieparzystego.

Życze milego liczenia. Jak ktoś potrzebuje mogę udostępnić moje notatki:)
Dla mnie liczy się tylko dobra zabawa!!!

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3925
    • Zobacz profil
  • Otrzymane polubienia: 277
Ruch po krzywej Beziera
« Odpowiedź #6 dnia: 25 Lutego 2006, 22:49:09 »
Może jakieś pochodne wyciągać albo cóś takiego, a w ogóle jest XXI wiek, czy nie lepiej poszukać porządnego narzędzia informatycznego, słyszałem, że takowe są. Mogą znacznie przyspieszyć rozwiązanie problema. Ponoć niektóre tylko krawatów nie wiążą.

Pozdrawiam
Mariusz

Offline myszka

  • Wiadomości: 20
    • Zobacz profil
  • Otrzymane polubienia: 0
Ruch po krzywej Beziera
« Odpowiedź #7 dnia: 25 Lutego 2006, 23:21:15 »
Pochodne nic nie pomogą, możemy co najwyżej wtedy dowiedzieć się, że rozwiazanie istnieje. A żaden ze znanych mi programów matematycznych nie rozwiąże zadania gdzie są dane parametry a nie wartości ale mogę się mylić. Szukajcie a znajdziecie!!!!!!
Dla mnie liczy się tylko dobra zabawa!!!

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Ruch po krzywej Beziera
« Odpowiedź #8 dnia: 26 Lutego 2006, 00:03:02 »
Wyniku nie potrzebuje ;) Tylko wzor dt= costam ;)

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3925
    • Zobacz profil
  • Otrzymane polubienia: 277
Ruch po krzywej Beziera
« Odpowiedź #9 dnia: 26 Lutego 2006, 00:25:14 »
Cytuj
Pochodne nic nie pomogą..

Możliwe, kiedy ja to liczyłem i po co to się liczyło to nie pamiętam. Pamiętam, że coś o extremach i miejscach zerowych. To było tak dawno..., ale mile wspominam :)
Moja refleksja to z biegiem czasu stwierdzam u siebie pogłębiający się wtórny analfabetyzm z matmy i to przykre :(

Offline myszka

  • Wiadomości: 20
    • Zobacz profil
  • Otrzymane polubienia: 0
Ruch po krzywej Beziera
« Odpowiedź #10 dnia: 26 Lutego 2006, 09:41:04 »
Funkacja posiada exstremum w miejscach zerowych pochodnej ale to nie ma tu zastosowania. Bo nie szukamy ekstremum.
Dla mnie liczy się tylko dobra zabawa!!!

Offline youBy

  • Deweloper
  • Wiadomości: 6163
  • Co tam?
    • Zobacz profil
    • Automat Weryfikujący Regulację i Lambdę
  • Otrzymane polubienia: 865
Ruch po krzywej Beziera
« Odpowiedź #11 dnia: 26 Lutego 2006, 10:16:07 »
@ShaXbee : a co sąw ogóle za parametry (czyli jakby je przetłumaczy na polski)?
Xoov
Powyższy post wyraża jedynie opinię autora w chwili publikacji. Autor zastrzega sobie prawo do zmiany poglądów bez podawania przyczyny, jak również informowania o tym.

++ cooky ++

  • Gość
Ruch po krzywej Beziera
« Odpowiedź #12 dnia: 26 Lutego 2006, 23:18:07 »
Cytat: "ShaXbee"
No to dla ostudzenia klimatu i rozgrzania mózgownic małe zadanko.

Rownanie:
x+dx = pt1*px1 + 3*pt2*cpx1 + 3*pt3*cpx2 + pt4*px2, gdzie:
pt1 = (1 - t - dt)^3, pt2 = ((1 - t - dt)^2) * (t + dt), pt3 = (1 - t - dt) * ((t + dt)^2), pt4 = (t + dt)^3

Dane:
px1, cpx1, px2, cpx2, t, x, dx
Szukane:
dt

Zalozenia:
0 <= t <= 1
0 <= (t + dt) <= 1


U mnie wychodzi takie coś:




są dwa rozwiązania, i te wzorki się tam ciągną jeszcze jakieś 19 metrów  :)

jesli można, to proszę mnie w to wtajemniczyć - może uda mi się jakoś pomóc (tzn. zoptymalizować to)

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3925
    • Zobacz profil
  • Otrzymane polubienia: 277
Ruch po krzywej Beziera
« Odpowiedź #13 dnia: 27 Lutego 2006, 02:13:45 »
Nie wiem, czy się nie zbłaźnię (jeżeli tak to wybaczcie jest godz. 2:18 i spać mi się chce), jeżeli nikomu nie uda się coś z tym zrobić wpadł mi do głowy pomysł, aby napisać program komputerowy, w którym podstawiłoby się dane liczbowe, a program metodą brutal force w pętli szukałby możliwie zbliżonego rozwiązania. Jeżeli jest to możliwe to niech komputer liczy nawet przez kilka dni, ale wynik będzie.

Pozdrawiam
Mariusz

Offline Quark-t

  • Administrator
  • Wiadomości: 3590
  • Automaty liczą...
    • Zobacz profil
  • Otrzymane polubienia: 47
Ruch po krzywej Beziera
« Odpowiedź #14 dnia: 27 Lutego 2006, 02:27:48 »
To się symbolic toolbox w matlabie nazywa.
Pozdrawiam, dr inż. Quark-t

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3925
    • Zobacz profil
  • Otrzymane polubienia: 277
Ruch po krzywej Beziera
« Odpowiedź #15 dnia: 27 Lutego 2006, 09:11:27 »
Quark-t napisał:
Cytuj
To się symbolic toolbox w matlabie nazywa.

Z opisu wynika, że dużo potrafi.

Pozdrawiam
Mariusz

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Ruch po krzywej Beziera
« Odpowiedź #16 dnia: 27 Lutego 2006, 10:08:51 »
OK, a więc po kolei...

Chodzi o krzywą beziera (opis w Wikipedii) trzeciego stopnia.

Jej rownanie przedstawia się następująco:
x = ((1-t)^3) * px1 + 3 * ((1-t)^2) * t * cpx1 + 3 * (1-t) * (t^2) * cpx2 + (t^3) * px2;
y = ((1-t)^3) * py1 + 3 * ((1-t)^2) * t * cpy1 + 3 * (1-t) * (t^2) * cpy2 + (t^3) * py2;
z = ((1-t)^3) * pz1 + 3 * ((1-t)^2) * t * cpz1 + 3 * (1-t) * (t^2) * cpz2 + (t^3) * pz2;

Równanie to zwraca współrzędne x, y, z punktu znajdującego się na t długości krzywej (t w przedziale od 0 do 1). Żeby narysować taką krzywą musimy pobrać punkty dla paru nastu/dziesięciu/set t, ale to akurat problemu nie stanowi.

Interesuje mnie takie przeksztalcenie powyzszego wzoru, aby znac wspolrzedne punktu oddalonego o okreslona odleglosc od punktu na t dlugosci krzywej beziera.

Mówiąc bardziej obrazowo: wózek lokomotywy / wagonu porusza się po krzywej. W każdej klatce animacji przesuwamy go o odległość zależną od prędkości. Przesuwamy więc tylną oś wózka i potrzebujemy poznać kąt pod jakim wózek jest obrócony - żeby to zrobić musimy określić pozycje przedniej osi wózka...

Zagmatwane troche...

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3925
    • Zobacz profil
  • Otrzymane polubienia: 277
Ruch po krzywej Beziera
« Odpowiedź #17 dnia: 27 Lutego 2006, 11:25:39 »
Poczytałem o krzywych Beziera no i karpik :)
Nie wiem jak powiązać to wszystko np. punkty kontrolne, algorytm de Casteljau.

Cytuj
Interesuje mnie takie przeksztalcenie powyzszego wzoru, aby znac wspolrzedne punktu oddalonego o okreslona odleglosc od punktu na t dlugosci krzywej beziera

tzn. jakaś delta t? i odległość w którą stronę (x,y,z)? Domniemam, że (y,z)

Cytuj
Mówiąc bardziej obrazowo: wózek lokomotywy / wagonu porusza się po krzywej. W każdej klatce animacji przesuwamy go o odległość zależną od prędkości. Przesuwamy więc tylną oś wózka i potrzebujemy poznać kąt pod jakim wózek jest obrócony - żeby to zrobić musimy określić pozycje przedniej osi wózka...


To w animacji zaczyna się przesuwać najpierw tylny wózek, a następnie przedni?
Czy skręt tylnego wózka jest zależny od skrętu przedniego, czy od krzywej po której jedzie determinującej jego skręt?

Wiem, że jesteś fachowcem o wiele mądrzejszym ode mnie, ale taka dygresja:
Wiadomo, że każda operacja matematyczna (szczególnie jakieś potęgowanie, pierwiastkowanie) na kompie zajmuje jakiś czas. Jeżeli ta operacja będzie liczona ciągle, to spadnie fps,czy nie lepiej zrobić symulacje (jakieś tabele) i w programie korzystać z tego np. (skoro przedziały są skończone)

IF coś tam <=coś tam and coś tam >= coś tam Then

return
end if

IF coś tam <=coś tam and coś tam >= coś tam Then

IF coś tam <=coś tam and coś tam >= coś tam Then

To mogłoby zajmować więcej bajtów w programie i kłopotliwe jest zrobienie takiej symulacji, ale program nie będzie liczył, tylko ma gotowce.
Jeżeli tych if byłoby dużo, można posortować dane i wtedy zastosować wyszukiwanie połówkowe i nie trzeba wtedy n porównań tylko o ile pamiętam n log n.
Na koniec przepraszam, bo może głupoty wypisuje.

Pozdrawiam
Mariusz

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Ruch po krzywej Beziera
« Odpowiedź #18 dnia: 27 Lutego 2006, 11:31:28 »
a) Odległość w 3d (x,y,z). czyli d = sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2);

b) Nie wózek - oś... Musimy określić w jakim kierunku jest obrócony wózek.

c) Dla krzywej beziera tablica bylaby gigantyczna... Zupelnie nieoplacalne... Masz tam 5 parametrów... Mozna natomiast stabelaryzowac wartosci (1-t)^3, (1-t)^2 * t, (1-t) * t^2 oraz t^3 - ale akurat optymalizacjami zajme sie jak bede mial juz co optymalizowac...

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3925
    • Zobacz profil
  • Otrzymane polubienia: 277
Ruch po krzywej Beziera
« Odpowiedź #19 dnia: 27 Lutego 2006, 12:38:18 »
Nie wiem, za trudne dla mnie poddaje się.
Dodam tylko, że nie wiem ile każdy z tych 5 parametrów może przyjmować wartości dlatego proponowałem tabele.
Może skorzystać z narzędzia, o którym napisał Quark-t

Dodano po 11 minutach:

 Edit:
Jak nikt s forumowiczów nie poradzi, to jeszcze ostateczność: zrobić zrzutkę pieniężną i niech to liczy matematyk.

Offline ABu

  • Zasłużony dla Symulatora
  • Wiadomości: 511
    • Zobacz profil
  • Otrzymane polubienia: 45
Ruch po krzywej Beziera
« Odpowiedź #20 dnia: 27 Lutego 2006, 14:08:29 »
Cytuj
Mówiąc bardziej obrazowo: wózek lokomotywy / wagonu porusza się po krzywej. W każdej klatce animacji przesuwamy go o odległość zależną od prędkości. Przesuwamy więc tylną oś wózka i potrzebujemy poznać kąt pod jakim wózek jest obrócony - żeby to zrobić musimy określić pozycje przedniej osi wózka...


No, można się bawić w matematyków i liczyć, albo zrobić tak jak ja w starym symku: jak przesuwasz wózek to znasz jego stare położenie, nie?
A znając aktualne i poprzednie znasz też kąt obrotu wózka. I wcale nie trzeba skomplikowanych równań, wystarczy arcus tangens policzyć :)

Jedyny problem to to, że wózek nie wie w którą stronę ma być obrócony na początku symulacji, ale przecież przy ustawianu taboru można go delikatnie przesunąć.

[nie startujmy z armatą na wróble]

Pozdrawiam
ABu
ABu

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3925
    • Zobacz profil
  • Otrzymane polubienia: 277
Ruch po krzywej Beziera
« Odpowiedź #21 dnia: 27 Lutego 2006, 15:23:30 »
Też już się kiedyś zastanawiałem, gdy były poruszane tematy fizyki dla nowego symka, że fizyka nie działa. Pomyślałem sobie wtedy dlaczego nie wykorzystywać wzorów ze starego symka. Nie znam szczegółów projetu starego i nowego. Próbowałem, wyjaśnić sobie dlaczego nie można z tego korzystać, ale może diabeł tkwi w szczegółach i autorzy mają swoje powody.

Pozdrawiam
Mariusz

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Ruch po krzywej Beziera
« Odpowiedź #22 dnia: 27 Lutego 2006, 16:22:17 »
Chwila, to da nam kat oznaczajacy odchylenie wektoru przesuniecia, a nie to co chcemy uzykac...

Offline Bart

  • Zasłużony dla Symulatora
  • Wiadomości: 415
    • Zobacz profil
  • Otrzymane polubienia: 0
Ruch po krzywej Beziera
« Odpowiedź #23 dnia: 27 Lutego 2006, 19:20:39 »
Cytat: "ABu"


No, można się bawić w matematyków i liczyć, albo zrobić tak jak ja w starym symku: jak przesuwasz wózek to znasz jego stare położenie, nie?
A znając aktualne i poprzednie znasz też kąt obrotu wózka. I wcale nie trzeba skomplikowanych równań, wystarczy arcus tangens policzyć :)

Jedyny problem to to, że wózek nie wie w którą stronę ma być obrócony na początku symulacji, ale przecież przy ustawianu taboru można go delikatnie przesunąć.

ABu


Dla mnie to rozwiazanie jest najlepsze. I tak nie zdarzyło się nam startować na łukach. Zawsze przecież można cały tabor pchnąć o pół metra przed wyświetleniem obrazu z symulacji.
Marcin_EU (21-08-2005 20:42) napisał:
wystarczy znalezc wielu frajerow i za 10 lat ze starego symka bedziecie mieli bve, a za 50 to moze i mstsa

Offline ABu

  • Zasłużony dla Symulatora
  • Wiadomości: 511
    • Zobacz profil
  • Otrzymane polubienia: 45
Ruch po krzywej Beziera
« Odpowiedź #24 dnia: 28 Lutego 2006, 10:13:49 »
Cytuj
Chwila, to da nam kat oznaczajacy odchylenie wektoru przesuniecia, a nie to co chcemy uzykac...


A sprawdzałeś jakiego rzędu są różnice pomiędzy tym co dostaniemy, a tym co chcemy dostać? :) Zaręczam, że są one niezauważalne. Od którejśtam wersji maszyny ten pomysł 'jeździ' i się jako tako sprawdza.

Poza tym można uwzględnić fakt, że promienie łuków kolejowych są niesłychanie duże, co aż się prosi o uproszczenia :)
ABu

++ cooky ++

  • Gość
Ruch po krzywej Beziera
« Odpowiedź #25 dnia: 28 Lutego 2006, 19:24:29 »
Do czego właściwie miałyby być potrzebne krzywe Beziera? Na dzieńdobry widać, że wzory są skomplikowane i procesor zamiast zająć się wyświetleniem grafiki liczyłby współrzędne wózka. Przejrzałem sobie trochę to: http://www.abc.com.pl/serwis/du/1998/0987.htm (§ 31-38) i z tego co zauważyłem to najbardziej skomplikowane wzory (a chyba dużo prostsze niż te Beziera) są przy rampie przechyłkowej na krzywej przejściowej. A napewno to też idzie uprościć, i zamiast krzywych porobić kilka łuków o różnych promieniach, a rampę przechyłkową zrobić na prostej. Ja rozumiem, że symulator ma wiernie odwzorowywać rzeczywistość ale chyba nikt nie będzie modelował wszystkich stopni odsprężynowania wózka, czy uwzględniał zużycia obrzeży kół albo główki szyny.

Ale ja się nie znam, to tylko moje zdanie :)
pozdrawiam

Offline youBy

  • Deweloper
  • Wiadomości: 6163
  • Co tam?
    • Zobacz profil
    • Automat Weryfikujący Regulację i Lambdę
  • Otrzymane polubienia: 865
Ruch po krzywej Beziera
« Odpowiedź #26 dnia: 01 Marca 2006, 07:44:42 »
@++ cooky ++: wszystkie tory, nawet w obecnej MaSzynie są krzywymi Bezziera (bynajmniej tak mi się zdaje)
Xoov
Powyższy post wyraża jedynie opinię autora w chwili publikacji. Autor zastrzega sobie prawo do zmiany poglądów bez podawania przyczyny, jak również informowania o tym.