Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгортм сталкновения 
:(
    Опции темы
Areostar
Дата 25.1.2010, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Здраствуйте! Вообще-то моя прога на Action Script 3.0 (Flash). Но вопрос по сути об алгоритме!!

игра которую я разрабатываю чем-то схожа с билиардом! нашёл в сети функцию обработки сталкновения:


Код

 private function collideBall(ballA:Ball,ballB:Ball):void
{
  var plotnost = 0.95; 

    /**
  * Находим точку столкномвения
  * (Центр отрезка между двумя центрами)
  **/
  var cx = (ballA.tx + ballB.tx)/2;
  var cy = (ballA.ty + ballB.ty)/2;
  
    /**
  * Находим Растояние между шарами
  * (Может быть и меньше 2х радиусов, необходима для выравнивания шара)
  **/
  var d = geom.distance(ballA.tx, ballA.ty, ballB.tx, ballB.ty)/2;
  
    /**
  * Сдвигаем шарики (отскок)
  * (Может быть и меньше 2х радиусов, необходима для выравнивания шара)
  **/
  ballA.tx = cx + (_ballRadius) * (ballA.tx - ballB.tx)/2/d;
  ballA.ty = cy + (_ballRadius) * (ballA.ty - ballB.ty)/2/d;
  
  ballB.tx = cx + (_ballRadius) * (ballB.tx - ballA.tx)/2/d;
  ballB.ty = cy + (_ballRadius) * (ballB.ty - ballA.ty)/2/d;
  
  
    /**
  * Сдвигаем шарики промежуточное положение
  * (Может быть и меньше 2х радиусов, необходима для выравнивания шара)
  **/
  ballB.tx = ballB.tx - ballB.speedX/_delimiter;
  ballB.ty = ballB.ty - ballB.speedY/_delimiter;
  
  ballA.tx = ballA.tx - ballA.speedX/_delimiter;
  ballA.ty = ballA.ty - ballA.speedY/_delimiter;
  
    /**
  * Получаем скорости шаров
  **/
  var v1 = Math.sqrt(ballA.speedX * ballA.speedX + ballA.speedY * ballA.speedY);
  var v2 = Math.sqrt(ballB.speedX * ballB.speedX + ballB.speedY * ballB.speedY);

    /**
  * Получаем углы наклона скоростей к оси OX
  **/
  var fi1 = Math.atan2(ballA.speedY,ballA.speedX);
  var fi2 = Math.atan2(ballB.speedY,ballB.speedX);

    /**
  * Получаем углы наклона между линией соединяющей центры шаров и осью OX
  **/
  var lambda1 = Math.atan2(ballB.ty - ballA.ty, ballB.tx - ballA.tx);
  var lambda2 = Math.atan2(ballA.ty - ballB.ty, ballA.tx - ballB.tx);
  
    /**
  * Получаем проекции скоростей на соединяющую линию между шарами
  **/
  var pv1 = v1 * Math.cos(lambda1 - fi1)*plotnost;
  var pv2 = v2 * Math.cos(lambda2 - fi2)*plotnost;
  
    /**
  * Получаем новые скорости (векроты направления)
  **/
  ballA.speedX = ballA.speedX - pv1 * Math.cos(lambda1) + pv2 * Math.cos(lambda2);
  ballA.speedY = ballA.speedY - pv1 * Math.sin(lambda1) + pv2 * Math.sin(lambda2);
  
  ballB.speedX = ballB.speedX - pv2 * Math.cos(lambda2) + pv1 * Math.cos(lambda1);
  ballB.speedY = ballB.speedY - pv2 * Math.sin(lambda2) + pv1 * Math.sin(lambda1);
} 
 
 
В принципе работает но...

Одно из главных отличий от билиарда в том чтто один из игровых снорядов(продолжим называть их шарами) значительно больше остальных! В реале у большенства диаметр 3,5 а у большого 5! А значит и тяжелее!(Матеиал одинаковый!)

какие поправки в алгоритм мне надо внести с учётом этого! поподробнее если можно! подобную прогу пишу в первый раз!!! 



PM MAIL   Вверх
Akina
Дата 25.1.2010, 18:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



1) закон сохранения импульса
2) закон сохранения энергии
3) элементарная геометрия
Из них строится всё.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Areostar
Дата 25.1.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Могбы сам всё расчитать нестал бы спрашивать!дате пожалуйста сссылочку какую нибуть! Может в  какой нибудь статейке Это подробно разбирается!! smile  Как мне вес учитывать(кажется тригонометрия тот непоможет! Или я ошибаюсь!)
PM MAIL   Вверх
Фантом
Дата 25.1.2010, 19:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Цитата(Areostar @  25.1.2010,  18:50 Найти цитируемый пост)
Могбы сам всё расчитать нестал бы спрашивать!дате пожалуйста сссылочку какую нибуть!

Любой учебник физики, раздел "Механика", параграф "Абсолютно упругий удар".

P.S. Почитайте, это в любом случае пригодится. Писать какие угодно игры, не разбираясь хотя бы в элементарной физике и математике, невозможно.
PM   Вверх
Areostar
Дата 7.2.2010, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Ну что то начало получаться!! ну во этот момент:

Код

ballB.tx = ballB.tx - ballB.speedX/_delimiter;
ballB.ty = ballB.ty - ballB.speedY/_delimiter;

ballA.tx = ballA.tx - ballA.speedX/_delimiter;
ballA.ty = ballA.ty - ballA.speedY/_delimiter;


Было сказано что этот код предотвращает пролёт шарика сквозь шарик! вот тока как вычеслить значение для переменной _delimiter ???  
        

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0766 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.