forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Хлопушка (http://forum.boolean.name/showthread.php?t=17727)

Devilox 07.01.2013 14:33

Хлопушка
 
Вложений: 1
Я всех уже задолбал физикой, но всё же...
Я сделал новогоднюю хлопушку, из которой вылетают шарики по нажатию левой кнопки мыши. Направление их движения естественно должно зависеть от соответствующего наклона хлопушки. Я геометрически нашёл проекции скоростей шариков на все оси, вот рисунок и уравнения, которые я использовал:

Дело почти элементарное, но вот если менять углы, то шарики начинают отклоняться от нужной мнимой оси очень значительно. Подскажите, кто разбирается, это блитз чего-то не понимает или я туплю(что более вероятно)?

SBJoker 07.01.2013 15:10

Ответ: Хлопушка
 
А что мешает двигать шарики вдоль локальной оси совпадающей с осью хлопушки?

Devilox 07.01.2013 15:26

Ответ: Хлопушка
 
Мешает сила тяжести и сила сопротивления воздуха, а впоследствии и ветер...

Dream 07.01.2013 16:01

Ответ: Хлопушка
 
Цитата:

Сообщение от Devilox (Сообщение 248588)
Мешает сила тяжести и сила сопротивления воздуха, а впоследствии и ветер...

Почему мешает? Можно же менять глобальные координаты для симуляции гравитации и ветра

Devilox 07.01.2013 16:18

Ответ: Хлопушка
 
Но с силой сопротивления сложнее(нужна для ограничения ускорения шариков): она направлена всегда в противоположную скорости сторону, надо, мне кажется, всё-таки как-то разложить скорость по осям... Или есть способ и силу сопротивления воздуха имитировать?

tormoz 07.01.2013 18:20

Ответ: Хлопушка
 
Используй локальные координаты и углы. Их специально придумали для подобных случаев.

Devilox 08.01.2013 14:02

Ответ: Хлопушка
 
Я кое-что поменял, код стал немного компактнее... Может так будет легче разобраться:
Код:

ex_part\speed = Rnd(0.1,0.11)
               
a1# = (Sin(90 - Abs(roll))^2) / (Cos(90 - Abs(roll))^2)
b1# = (Tan(90 - Abs(roll))^2) / (Tan(90 - Abs(pitch))^2)
a2# = (Cos(90 - Abs(pitch))^2) / (Sin(90 - Abs(pitch))^2)
b2# = (Cos(90 - Abs(roll))^2) / (Sin(90 - Abs(roll))^2)
a3# = (Sin(90 - Abs(pitch))^2) / (Cos(90 - Abs(pitch))^2)
b3# = (Tan(90 - Abs(pitch))^2) / (Tan(90 - Abs(roll))^2)

ex_part\xspeed = Sqr(ex_part\speed^2 / (1 + a1 + b1))
ex_part\yspeed = Sqr(ex_part\speed^2 / (1 + a2 + b2))
ex_part\zspeed = Sqr(ex_part\speed^2 / (1 + a3 + b3))


Devilox 08.01.2013 15:28

Ответ: Хлопушка
 
Я решил затестить скорость движения по локальным координатам и по моему способу:



Почему скорость по оси X в локальных координатах такая странная, если по оси X и Z хлопушка повёрнута на 45 градусов?(расчёт всех скоростей проводился через глобальные координаты)

Devilox 13.01.2013 17:58

Ответ: Хлопушка
 
Я заметил ещё кое-какую вещь: если поворачивать хлопушку на одинаковые углы по оси X и Z, то с увеличением угла от 0 до 90 хлопушка начинает кривить и, вместо того, чтобы лечь на плоскость XOZ под 45 градусов к осям X и Z, ложится на ось Z, притом вращаясь восьмёркой... Может, кто знает, есть ли способ вращать цилиндр не силами Blitz-а? А кватернионы не помогут?


Часовой пояс GMT +4, время: 01:28.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot