Nirvan Opublikowano 11 Października 2013 Udostępnij Opublikowano 11 Października 2013 Od dłuższego czasu próbuję rozkminić jak jest obliczana funkcja w cinemie 4D do automatycznego dopasowywania punktów kontrolnych w krzywych beziera. Pokaże wam jak to tam wygląda, może razem to odczytamy ;) Ogólnie nie trzeba wiedzieć za bardzo jak działa krzywa beziera, bo to wyznaczanie punktów jest prawie takie same jak na osi. Najważniejsze to ustalić od czego uzależnione jest to ustawianie. Tu filmik jak to wygląda: Jakby co to jeden punkt kontrolny jest zawsze ustawiany naprzeciwko drugiego automatycznie. Próbuję to jakoś rozgryźć, ale nie wiem dlaczego, gdy mamy klucz klatkę na środku to punkty w żaden sposób punkty się nie zmieniają, jakby tylko od osi x były uzależnione, ale jak przesunie się ze środka to już jakby obydwie osi są brane pod uwagę. Myślę sobie że jak klucz klatka jest bardziej na prawej stronie to uzależnia się od tej klucz klatki, gdy na lewej to od lewej, a na środku to od żadnej/obydwu. Zrobiłem własne dopasowywanie, ale w akcji nie jest takie sprawne jak tutaj. Z góry dzięki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 11 Października 2013 Udostępnij Opublikowano 11 Października 2013 Prawdopodobnie chodzi o coś takiego: Y = (xb >= M)*(X-point_direction(xb,yb,xc,yc)*(xb-M)/M)+(xb < M)*(X-point_direction(xa,ya,xb,yb)*(1-((M-xb)/M))) Wyjeśnienie: jeżeli współrzędna x punktu środkowego B jest większa od lub równa średniej współrzędnych x punktów krańcowych A i C, wtedy kąt, jaki punkty kontrolne wyznaczają z kierunkiem od B do C, jest równy różnicy kierunku początkowego i kierunku od B do C; następnie kąt jest mnożony przez (xb-M)/M, czyli im bliżej punktu C jest punkt B w osi X, tym mocniej kąt jest modyfikowany; jeżeli punkt B znajduje się dokładnie między A i C, kąt nie jest modyfikowany. Podobnie dla punktu A, jeśli xb jest mniejsze od M. Nie mówię, żebyś kopiuj-wklej mój kod, bo pewnie coś namieszałem z point_direction (zapewne zła kolejność punktów), ale działa to na podobnej zasadzie, co w tym Cinema 4D. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 11 Października 2013 Autor Udostępnij Opublikowano 11 Października 2013 Dzięki za fatygę, tylko nie do końca rozumiem czym jest tutaj kierunek początkowy X Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 11 Października 2013 Udostępnij Opublikowano 11 Października 2013 Za kierunek początkowy można podstawić kierunek od A do C, po prostu chciałem to uogólnić, to działa dla każdego kąta. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 12 Października 2013 Autor Udostępnij Opublikowano 12 Października 2013 Niezbyt mi to działa, jakie powinny wychodzić wyniki? Mi ciągle wychodzą za duże, najbardziej jak punkt B z innym jest jakby na równi y i blisko xem. Zapisałem tak: if ( ActualF >= Mean ) val = ( dirs - dirPre ) * ( ActualF - Mean ) / Mean; else val = ( dirs - dirNe ) * ( 1 - ( ( Mean - ActualF ) / Mean ) ); ActualF to aktualna klatka Mean to srednia odległości od B do A i od B do C val to wartośc do wstawienia za y dirs to kąt od A do C dirPre to kąt z B do A dirNe to kąt z B do C Nie do końca rozumiem jak to powinno działać, według mnie to trochę odbiega od rozwiązania bo liczymy kąty zamiast wartości które mogą być całkowicie różne, a z kątów jak już to trzeba by wyliczyć lengthdiry lub coś. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się