Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 12.07.2011, 17:12
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Код AS3:
// начальная позиция шара А
var nX1:Number = MCBallA.x; // Х
var nY1:Number = MCBallA.y; // Y
 
// вектор направления (от шара А к шару Б)
var nDistX:Number = MCBallB.x - nX1; // X
var nDistY:Number = MCBallB.y - nY1; // Y
 
// расстояния между шарами
var nDistance:Number = Math.sqrt ( nDistX * nDistX + nDistY * nDistY );
// радиус шара А
var nRadiusA:Number = MCBallA.width/2;
// радиус шара Б
var nRadiusB:Number = MCBallB.width/2;
 
// нормаль направления (от шара А к шару Б)
var nNormalX:Number = nDistX/nDistance; // Х
var nNormalY:Number = nDistY/nDistance; // Y
 
// средняя точка между шарами
var nMidpointX:Number = ( nX1 + MCBallB.x )/2; // Х
var nMidpointY:Number = ( nY1 + MCBallB.y )/2; // Y
 
// позиционируем шар А и Б так, чтобы они не пересекались.
// Средняя точка +/- нормаль*радиус
// Шар А
MCBallA.x = nMidpointX - nNormalX * nRadiusA; 
MCBallA.y = nMidpointY - nNormalY * nRadiusA;
// Шар Б
MCBallB.x = nMidpointX + nNormalX * nRadiusB;
MCBallB.y = nMidpointY + nNormalY * nRadiusB;
 
// Скалярное произведение вектора разности скорости на нормаль направления (от шара А к шару Б)
// Т.е. вычисляется общая скорость сближения с учетом направлений движения шаров
var nVector:Number = ( ( MCBallA.nSpeedX - MCBallB.nSpeedX ) * nNormalX )+ ( ( MCBallA.nSpeedY - MCBallB.nSpeedY ) * nNormalY );
 
// Перевод скорости сближения в вектор
var nVelX:Number = nVector * nNormalX;
var nVelY:Number = nVector * nNormalY;
 
// Вычисление новых скоростей для шаров, после соударения
// Для шара А - вычитаем
MCBallA.nSpeedX -= nVelX;
MCBallA.nSpeedY -= nVelY;
// Для шара Б - прибавляем
MCBallB.nSpeedX += nVelX;
MCBallB.nSpeedY += nVelY;


Последний раз редактировалось i.o.; 12.07.2011 в 17:19.
Создать новую тему   Часовой пояс GMT +4, время: 03:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.