01-30-2017, 01:05 PM
Заранее хочу извинится за то, что данная тема имеет лишь косвенное отношение к Lineage2, а по большей части к геометрии.
В добавок я уже нашел похожую тему но точного ответа в ней не было.
Задача поставлена четко и ясно. Прошу не писать в теме зачем это нужно тд, и тп. Если у кого то есть информация как решить данную задачу или хотя бы в каком направлении подумать буду рад почитать.
PS никогда не любил геометрию
Ситуация:
Объект начал движение из точки А к точке B.
Дано(все данные условны. Чисто ради примера):
А(0.0.0) B(15.15.15) - x,y,z соответственно. z - высота.
ObjectSpeed = 2. (точек в секунду)
Задача.
Найти промежуточные координаты в ЛЮБОЙ момент движения(координаты точек принадлежащих к отрезку АВ).
Например нужно узнать в какой точке объект будет находится спустя 3 секунды после начала движения, если он еще не дошел до конца (а через 3 секунды он и не дойдет с текущими параметрами)
Нашел решение задачи только если в расчетах используется лишь X и Y.
Так как произвести расчет чтобы впихнуть сюда еще и учет координаты Z.
В добавок я уже нашел похожую тему но точного ответа в ней не было.
Задача поставлена четко и ясно. Прошу не писать в теме зачем это нужно тд, и тп. Если у кого то есть информация как решить данную задачу или хотя бы в каком направлении подумать буду рад почитать.
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 * [color=Green]Math.cos(atan)[/color]);//если deltaX зависит от косинуса
int deltaY = (int) (distanceTreveled * [color=green]Math.sin(atan)[/color]);//а deltaY зависит от синуса
//То от чего будет зависить дельта Z?
int [color=Red]newPlayerX [/color]= currX + deltaX;
int [color=Red]newPlayerY [/color]= currY + deltaY;