Показать сообщение отдельно
Непрочитано 30.01.2017, 13:05   #1
Пользователь

Автор темы (Топик Стартер) Расчет координат в момент передвижения.

Заранее хочу извинится за то, что данная тема имеет лишь косвенное отношение к Lineage2, а по большей части к геометрии.
В добавок я уже нашел похожую тему но точного ответа в ней не было.

Задача поставлена четко и ясно. Прошу не писать в теме зачем это нужно тд, и тп. Если у кого то есть информация как решить данную задачу или хотя бы в каком направлении подумать буду рад почитать.

PS никогда не любил геометрию

Ситуация:
Объект начал движение из точки А к точке B.

Дано(все данные условны. Чисто ради примера):
А(0.0.0) B(15.15.15) - x,y,z соответственно. z - высота.
ObjectSpeed = 2. (точек в секунду)

Задача.
Найти промежуточные координаты в ЛЮБОЙ момент движения(координаты точек принадлежащих к отрезку АВ).
Например нужно узнать в какой точке объект будет находится спустя 3 секунды после начала движения, если он еще не дошел до конца (а через 3 секунды он и не дойдет с текущими параметрами)

Нашел решение задачи только если в расчетах используется лишь X и Y.
Код:
int currX = 0;//Координата X точки А
int currY = 0;//Координата Y точки А

int targetX = 15;//Координата X точки B
int targetY = 15;//Координата Y точки B

long startingTime = Time.TimeNowInMs;
long timeNeedToCalculate = startingTime + 3 * 1000
int speed = 2; //Точек в секунду.

double distanceTreveled = (timeNeedToCalculate  - startingTime) * (speed * 1000);//Расстояние, которое пройдет объект за  3 секунды.

double tgA = (targetY-currY)/(targetX-currX);
double atan = Math.atan(tgA);

int deltaX = (int) (distanceTreveled * Math.cos(atan));//если deltaX зависит от косинуса
int deltaY = (int) (distanceTreveled * Math.sin(atan));//а deltaY зависит от синуса 
//То от чего будет зависить дельта Z?

int newPlayerX = currX + deltaX;
int newPlayerY = currY + deltaY;
Так как произвести расчет чтобы впихнуть сюда еще и учет координаты Z.
Alay вне форума Ответить с цитированием