Показать сообщение отдельно
Старый 06.02.2011, 10:09   #6
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: 360 Градусов

Сообщение от impersonalis Посмотреть сообщение
1. определить тип аппроксимирующей кривой, описвающей траекторию.
2. вычислить праметры, задающие кривую
3. записать уравнения координат тела.

1. прямая линия. уравнение вида y(x)=kx+b
2. два параметра, две заданных точки
y1=k*x1+b
y2=k*x2+b
решаем систему, находим k и b.
3. y(t)=yn+sin(a)*t
x(t)=xn+cos(a)*t
a=k, хn=x1, yn=y1
b нужно для решения системы (2), в дальнейшем компенсируется значениями (xn;yn), т.к. характеризует вертикальный сдвиг прямой (перенос по оси 0Y). [можно перписать в виде y(t)=xn+sin(a)*t+b].
3.1. а можно сразу выразить как atan2[(y2-y1),(x2-x1)]. Внимание: в разных языках значение первого и второго аругмента может быть инвертировано (т.е. где-то f(x,y), а где-то f(y,x) - обязательно прочесть инструкцию).
Примечание: надо отметить, что знак зависимой части в уравнении для ординаты, завист от ориентации вертикальной оси интерфейса вывода (как правило, не совпадает с классической математической).
Примечание: ряд задач может требовать рекурентное задние уравнений (3).
У меня как раз с третьим методом проблема. Код выглядит примерно так(без паскалевского синтаксиса)
DelthaY=y2-y1
DelthaY=x2-x1
Angle=Atan2(DelthaY,DelthaX)*180/Pi
SpeedX=cos(Angle)*10;
SpeedY=sin(Angle)*10;
ProjectileX=ProjectileX+SpeedX
ProjectileY=ProjectileY+SpeedY
Вот этим кодом я пользовался еще с флеша. В паскале с ним какая то фигня. Угол получается мягко говоря странным.
Первые два метода еще не пробовал, спасибо. Надо над ними подумать.
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием