![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Биллиард. [Delphi, Windows]
Shopot © (2004-04-16 23:36:00)Привет! Как сделать, чтобы при столкновении шары отскакивали друг от друга, обменивались импульсами и т. п. (даже если они будут плоскими).
Shopot (2004-04-26 22:58:00) [1]>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;
Yar-Com (2004-04-26 07:54:00) [2]ну шаров не так много чтоб с ними что-то делать....
так что каждый с каждым я думаю в самый раз...
Antichrist (2004-04-26 01:05:00) [3]вопрос 2 bask
Antichrist (2004-04-26 00:52:00) [4]Исходники действительно недоступны, но дело не в том. Вопрос: как ты проверяешь возможность столкновения шариков. Каждую итерацию принцип :"каждый с каждым" или отсортированный массив, список?
Shopot (2004-04-25 23:57:00) [5]> bask
Экзешник есть, а вот исходники... Это самое интерестное.
bask (2004-04-25 12:52:00) [6]а, вообще, советую почитать книгу Рона Шеппарда по ОСНОВАТЕЛЬНОМУ описанию физической модели игры в пул в целом: физика столкновения шаров друг с другом, с сукном, с кием, и прочее... В книге более 100 страниц!
bask (2004-04-25 12:17:00) [7]Shopot:
ссылка http://www.bzonesoft.com/rus/products/billiard/index.htmlработает
Yar-Com (2004-04-25 08:11:00) [8]"Применять сложные физ-мат.модели. Которые еще надо найти и/или составить самому. У тебя все в порядке с высшей математикой?"
Да там действительно есть некоторые сложности, вообще информации по имплементации реалистичной %) физики очень мало в инете, точнее очень мало на русском, на русском тока тер. мех. наверное =))), а на английском ищи любые труды Дэвида Барафа (David Baraff) у него есть все что нужно...
"С Дэвидом" я думаю можно написать убойный бильярд где шары даже будут вылетать из поля или можно будет делать всякие бильярдкие фишки =) и все это в 3D.
miek (2004-04-24 23:54:00) [9]>"закручивание" шаров после соударения
Применять сложные физ-мат.модели. Которые еще надо найти и/или составить самому. У тебя все в порядке с высшей математикой?
Или, как совершенно правильно заметил Yar-Com, "читерскими" методами, подогнав какие-нибудь простые формулы под свои нужды.
Shopot (2004-04-24 23:04:00) [10]> bask
я туда ходил, там ниче нету :(
скинь на мыло , если еще чё осталось, plz.
sskolot (2004-04-24 20:01:00) [11]такой вопрос - а как сделать "закручивание" шаров после соударения, если я знаю коэф. трения для каждой пары шаров?
bask (2004-04-22 11:47:00) [12]долбаный парсер!!!
вот: http://www.bzonesoft.com/rus/products/billiard/index.html
bask (2004-04-22 11:46:00) [13]Вот, я <a href= http://www.bzonesoft.com/rus/products/billiard/index.html>написал</a>несколько лет назад для таких, как ты :)
Yar-Com (2004-04-22 09:48:00) [14]Приближенно можно считать, что столкновение двух шаров абсолютно упругое, т.е. при столкновении они обмениваются импульсами.
новое направление для одного из шаров можно считать так:
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];
а кручение шара при ударе по касательной можно сделать читерскими методами :)
TButton (2004-04-22 07:20:00) [15]предположим, шар А сталкивается с шаром Б
импульс движения теряет 5-10%
вычисляешь угол столкновения, как разницу между направлением движения шара и направлением между центрами шаров.
шар Б получает импульс движения = cos(угла столкновения)*импульс движения шара А*0.95 (потеря 5% импульса)
шар А получает импульс движения = sin(угла столкновения)*импульс движения шара А*0.95 (потеря 5% импульса)
направление тоже расчитывается из угла столкновения, сейчас точно не скажу как именно, надо по сидеть, на бумаге прикинуть.
zeqfreed (2004-04-21 21:42:00) [16]2 miek
Согласен... я же написал - простейший вариант
miek (2004-04-21 19:07:00) [17]Не работает такой подход!!! Шарики симулировать - это не "hello world" рисовать, там сложнейшая физика должна быть. Вращение по всем осям, трение с проскальзыванием...
zeqfreed (2004-04-21 18:08:00) [18]Должно работать,
что именно не работает? не компилируется? ;)
Shopot (2004-04-20 22:11:00) [19]Zeqfreed это не работает!
Zeqfreed (2004-04-18 19:30:00) [20]Определить переменные xinc, yinc и приращать каждый промежуток времени координаты шаров на эти переменные, если шар сталкиваются, то xinc := - xinc, yinc := -yinc.
Это простейший вариант.