Перемещение непосредственно из пункта А в пункт Б - PullRequest
1 голос
/ 18 февраля 2012

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

Итак, что я уже сделал, это

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

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

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

Ответы [ 3 ]

1 голос
/ 18 февраля 2012

Чтобы вычислить скорость с заданного угла, используйте это:

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

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

1 голос
/ 18 февраля 2012

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

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

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

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

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

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

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

1 голос
/ 18 февраля 2012

Может быть, использование этого поможет

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);
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...