Показать сообщение отдельно
Старый 01.08.2008, 19:05
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 5  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Первое что пришло в голову. Значит, есть массив координат.
Есть объект который движется по ломанной, заданной этими координатами.
У объекта есть скорость и текущее положение (просто вещественное число).
Для начала найдем длину ломанной. То есть сумму длин всех отрезков. Причем длину каждого отрезка нам также нужно хранить в массиве. Надеюсь школьные формулы все помнят (: Далее нам потребуется ещё один массив. Он по размеру будет такой же как массив координат. Только содержать будет не координаты, а длину ломанной от начала до данной точки. То есть с помощью него мы сможем зная пройденный путь(наше текущее положение) определить на каком из отрезков мы находимся. Надеюсь с этим всё понятно. Главное подготовить эти данные, остальное всё просто. Потом происходит анимация. К нашей координате всё время прибавляется скорость, и скорость уменьшается на какой-то коэфициент(равнозамедленное, ага). После того как расчитали новое значение нашей координаты, определим на каком отрезке мы находимся. Это просто, мы же знаем на каком участке пути какое расстояние будет пройдено. Далее нам нужен нормализованный вектор текущего отрезка. Назовем его V. Потом найдем разность между пройденным нами расстоянием и расстоянием до начала текущего отрезка. Фактически это будет расстояние, которое мы прошли по текущему отрезку. Если мы это расстояние поделим на длину текущего отрезка, получим некий коэфициент. Он всегда будет от 0 до 1. Назовем его k.
Так вот, наша текущая координата будет определяться формулой
pos = x0 + V * L * k
где pos - это координата начала отрезка, x0 - начальная координата отрезка, V - нормальзованный вектор, полученный из этого отрезка(находить по типу normalize(x1-x0)) L - длина отрезка, K - коэфициент от 0 до 1. Векторную алгебру все помнят? (:
Описал как всегда смутно. ИМХО реализуется всё очень просто, нужно только немного подумать.
__________________
while(1) {}


Последний раз редактировалось Division; 01.08.2008 в 19:14.