Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.08;
Скачать: CL | DM;

Вниз

Биллиард.   Найти похожие ветки 

 
Shopot ©   (2004-04-16 23:36) [0]

Привет! Как сделать, чтобы при столкновении шары отскакивали друг от друга, обменивались импульсами и т. п. (даже если они будут плоскими).


 
Zeqfreed ©   (2004-04-18 19:30) [1]

Определить переменные xinc, yinc и приращать каждый промежуток времени координаты шаров на эти переменные, если шар сталкиваются, то xinc := - xinc, yinc := -yinc.
Это простейший вариант.


 
Shopot ©   (2004-04-20 22:11) [2]

Zeqfreed это не работает!


 
zeqfreed ©   (2004-04-21 18:08) [3]

Должно работать,
что именно не работает? не компилируется? ;)


 
miek ©   (2004-04-21 19:07) [4]

Не работает такой подход!!! Шарики симулировать - это не "hello world" рисовать, там сложнейшая физика должна быть. Вращение по всем осям, трение с проскальзыванием...


 
zeqfreed ©   (2004-04-21 21:42) [5]

2 miek
Согласен... я же написал - простейший вариант


 
TButton ©   (2004-04-22 07:20) [6]

предположим, шар А сталкивается с шаром Б
импульс движения теряет 5-10%
вычисляешь угол столкновения, как разницу между направлением движения шара и направлением между центрами шаров.
шар Б получает импульс движения = cos(угла столкновения)*импульс движения шара А*0.95 (потеря 5% импульса)
шар А получает импульс движения = sin(угла столкновения)*импульс движения шара А*0.95 (потеря 5% импульса)

направление тоже расчитывается из угла столкновения, сейчас точно не скажу как именно, надо по сидеть, на бумаге прикинуть.


 
Yar-Com   (2004-04-22 09:48) [7]

Приближенно можно считать, что столкновение двух шаров абсолютно упругое, т.е. при столкновении они обмениваются импульсами.
новое направление для одного из шаров можно считать так:
N - нормаль к поверхности шара в точке столкновения (я думаю, не составит труда ее посчитать)
V - Вектор скорости шара до столкновения
Result - вектор шара после столкновения

Dot := VectorAffineDotProduct(V, N);
Result[X] := V[X] - 2 * Dot * N[X];
Result[Y] := V[Y] - 2 * Dot * N[Y];
Result[Z] := V[Z] - 2 * Dot * N[Z];

а кручение шара при ударе по касательной можно сделать читерскими методами :)


 
bask   (2004-04-22 11:46) [8]

Вот, я <a href=http://www.bzonesoft.com/rus/products/billiard/index.html>написал</a> несколько лет назад для таких, как ты :)


 
bask   (2004-04-22 11:47) [9]

долбаный парсер!!!
вот: http://www.bzonesoft.com/rus/products/billiard/index.html


 
sskolot   (2004-04-24 20:01) [10]

такой вопрос - а как сделать "закручивание" шаров после соударения, если я знаю коэф. трения для каждой пары шаров?


 
Shopot ©   (2004-04-24 23:04) [11]

> bask

я туда ходил, там ниче нету :(
скинь на мыло , если еще чё осталось, plz.


 
miek ©   (2004-04-24 23:54) [12]

>"закручивание" шаров после соударения

Применять сложные физ-мат.модели. Которые еще надо найти и/или составить самому. У тебя все в порядке с высшей математикой?
Или, как совершенно правильно заметил Yar-Com, "читерскими" методами, подогнав какие-нибудь простые формулы под свои нужды.


 
Yar-Com   (2004-04-25 08:11) [13]

"Применять сложные физ-мат.модели. Которые еще надо найти и/или составить самому. У тебя все в порядке с высшей математикой?"

Да там действительно есть некоторые сложности, вообще информации по имплементации реалистичной %) физики очень мало в инете, точнее очень мало на русском, на русском тока тер. мех. наверное =))), а на английском ищи любые труды Дэвида Барафа (David Baraff) у него есть все что нужно...

"С Дэвидом" я думаю можно написать убойный бильярд где шары даже будут вылетать из поля или можно будет делать всякие бильярдкие фишки =) и все это в 3D.


 
bask   (2004-04-25 12:17) [14]

Shopot:
ссылка http://www.bzonesoft.com/rus/products/billiard/index.html работает


 
bask   (2004-04-25 12:52) [15]

а, вообще, советую почитать книгу Рона Шеппарда по ОСНОВАТЕЛЬНОМУ описанию физической модели игры в пул в целом: физика столкновения шаров друг с другом, с сукном, с кием, и прочее... В книге более 100 страниц!


 
Shopot ©   (2004-04-25 23:57) [16]

> bask  

Экзешник есть, а вот исходники... Это самое интерестное.


 
Antichrist ©   (2004-04-26 00:52) [17]

Исходники действительно недоступны, но дело не в том. Вопрос: как ты проверяешь возможность столкновения шариков. Каждую итерацию принцип :"каждый с каждым" или отсортированный массив, список?


 
Antichrist ©   (2004-04-26 01:05) [18]

вопрос 2 bask


 
Yar-Com   (2004-04-26 07:54) [19]

ну шаров не так много чтоб с ними что-то делать....
так что каждый с каждым я думаю в самый раз...


 
Shopot ©   (2004-04-26 22:58) [20]

>Antichrist

Каждый с каждым.

for i := 0 to ...
  for j := 0 to ...
if (i <. j) and Abs(Distance(Ball[i].X, Ball[i].Y, Ball[j].X, Ball[j].Y) <= 2*Rad then
begin
       ?????????????????
end;



Страницы: 1 вся ветка

Текущий архив: 2004.08.08;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
1-1090649821
Fagot
2004-07-24 10:17
2004.08.08
SAM


1-1090511155
юзверь
2004-07-22 19:45
2004.08.08
работа с ресурсами *.RES


11-1076835066
M5
2004-02-15 11:51
2004.08.08
Как выбрать каталог используя МСК?


1-1090606254
sashok
2004-07-23 22:10
2004.08.08
Динамически создаваемые компоненты.


1-1090403195
Андрей Л.
2004-07-21 13:46
2004.08.08
Как осуществить прокрутку в ScrollBox при помощи колеса мыши?