Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.034 c
6-1086101138
Sword
2004-06-01 18:45
2004.08.08
IP по MAC


9-1082132972
Xerx
2004-04-16 20:29
2004.08.08
IDirectDrawSurface7 и цветовой ключ


14-1090071933
sucer
2004-07-17 17:45
2004.08.08
Живучисть HDD при переноски


14-1089973515
вразлет
2004-07-16 14:25
2004.08.08
Должностные инструкции


14-1090248988
Суслик
2004-07-19 18:56
2004.08.08
Паттерны проектирования и Дельфи.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский