Kinematyka odwrotna na przykładzie węża

Odpowiedz Nowy wątek
2019-05-03 21:33
2

Cześć,

przeklejam swój wątek https://forum.lazarus.freepascal.org/index.php/topic,45282.0.html z forum Lazarusa. Może się przydać piszącym gry, chociaż napisałem to w celu testowym do obliczania kąta dla poszczególnych segmentów. Można ten projekt nawet potraktować jako wyjściowy etap do prostej gierki. Co kto lubi...

edytowany 2x, ostatnio: furious programming, 2019-05-03 23:12
Dorzuć źródła do załączników posta, tak aby nie trzeba było ich szukać nie wiadomo gdzie. - furious programming 2019-05-04 01:04

Pozostało 580 znaków

2019-05-11 23:44
0

Wyszło całkiem nieźle, choć z tym wiatrem to miałem na myśli jedynie oś X. :]

No nic, czekam w takim razie na kod źródłowy.


Pozostało 580 znaków

2019-05-17 21:50
1

prościej chyba tego się nie da napisać (na pewno bardziej elegancko).. ;)

  • kod.7z (0 MB) - ściągnięć: 3

Pozostało 580 znaków

2019-05-20 18:27
0

@machinebyte4: działać działa, ale ten wiatr wygląda słabo i dość nierealistycznie wygina to drzewko. Wszystko dlatego, że owy wiatr w Twoim kodzie nie jest parametrem wychylania gałęzi, a przyciągania ich końcówek do określonego punktu. Czyli działa to tak samo jak w przypadku węża, z tą różnicą, że teraz jest wiele węży połączonych ze sobą.

Poza tym nadal kod nie wygląda zbyt dobrze. Stosujesz złe praktyki, jeśli chodzi o nazewnictwo elementów (zmiennych, stałych, parametrów itd.), formatowanie kodu (głównie instrukcje warunkowe), nadal używasz zmiennych globalnych do przechowywania elementów, które globalnymi być nie powinny. No i nadal pitolisz się z gołymi macierzami, zamiast skorzystać z wygodniejszych i prostszych w użyciu kontenerów (np. z listy generycznej) oraz opakować drzewko w wygodną klasę, tak aby łatwo było zarządzać całą zawartością (czyli wszystkimi gałęziami).


Jeśli chcesz się jeszcze pobawić tym drzewkiem to popraw to o czym napisałem w powyższym paragrafie. Natomiast jeśli chodzi o sposób wyginania gałęzi, to zabierz się za to z d**y strony. Dosłownie – nie modyfikuj pozycji i kąta segmentów od czubków końcowych gałęzi, a idąc od pnia drzewa aż do końcowych segmentów. Czyli najpierw przechyl pień i wszystko wyżej, następnie przechyl gałęzie wychodzące z pnia i wszystko ponad nimi itd. itd., aż do samego końca (użyj rekurencji).

Jeśli chodzi o wiatr, to użyj tylko jednej liczby, która określi kierunek i siłę wiatru w osi X (skoro i tak korzystasz z rzutu bocznego). Im wyższa wartość, tym silniejszy przechył. Natomiast przechylenie gałęzi możesz zrealizować bazując na okręgu i zwiększeniu kąta. Wierzchołek danego segmentu bliższy pnia potraktuj jako środek okręgu, a długość segmentu jako promień. W takim przypadku przechylenie segmentu oznaczać będzie obliczenie punktu na tym okręgu według bieżącego konta plus (lub minus) siła wiatru razy mnożnik. Mnożnikiem może być numer segmentu licząc od pnia – im dalej od niego, tym wyższa wartość mnożnika, a więc mocniejszy przechył (à la im dalej od pnia, tym cieńsze gałęzie i bardziej podatne na odkształcanie).

Potem możesz dodać kolejne parametry, np. wyginanie się gałęzi (rysowane jako łuki) i pulsujący wiatr. ;)


edytowany 5x, ostatnio: furious programming, 2019-05-20 20:09

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: CCBot