2012-02-18 1 views
1

У меня есть x и y (Моя позиция), а также destination.x и destination.y (где я хочу получить). Это не для домашней работы, просто для обучения.Перемещение непосредственно из пункта A в точку B

Так что я уже

float x3 = x - destination.x; 
float y3 = y - destination.y; 

float angle = (float) Math.atan2(y3, x3); 
float distance = (float) Math.hypot(x3, y3); 

я угол и расстояние, но не знаю, как заставить его двигаться прямо. Пожалуйста, помогите! Спасибо!

+0

Что вы имеете в виду под «двигаться прямо»? –

+0

@OliCharlesworth Я имею в виду, что он перемещается из одной точки в другую, но до этого он вычисляет угол и все, как он должен идти, поэтому он идет по кратчайшему пути. – IvanDonat

ответ

1

Может использовать это поможет

float vx = destination.x - x; 
float vy = destination.y - y; 
for (float t = 0.0; t < 1.0; t+= step) { 
    float next_point_x = x + vx*t; 
    float next_point_y = y + vy*t; 
    System.out.println(next_point_x + ", " + next_point_y); 
} 

Теперь у вас есть координаты точек на линии. Выбирайте шаг до достаточно малого в соответствии с вашими потребностями.

+0

WOW! Большое спасибо! Это действительно здорово! Я немного изменил код, чтобы сделать его проще и проще в использовании (для меня): D – IvanDonat

1

Для вычисления скорости от заданного угла используйте:

velx=(float)Math.cos((angle)*0.0174532925f)*speed; 
vely=(float)Math.sin((angle)*0.0174532925f)*speed; 

* скорость = ваша скорость :) (играть с номером, чтобы посмотреть, что является правильным)

1

Я рекомендую вычисляя х и y компонентов вашего движения независимо. с использованием тригонометрических операций значительно замедляет вашу программу.

простое решение для вашей проблемы будет:

float dx = targetX - positionX; 
float dy = targetY - positionY; 

positionX = positionX + dx; 
positionY = positionY + dy; 

в этом примере кода, рассчитать х и у расстояние от точки до цели и перемещении туда в один шаг.

Вы можете применить коэффициент времени (< 1) и выполнить расчет несколько раз, чтобы он выглядел так, как будто ваш объект движется.

Обратите внимание, что + и - гораздо быстрее, чем cos(), sin() и т.д.

Смежные вопросы