2015-05-11 2 views
1

Скажем, я начинаю в точке W, направляясь через точку А в конечной точке B.Нарисуйте поворота дуги, соединяющей 3 точек в Java

straight line from W to A and from A to B

Я хотел бы, чтобы вместо того, чтобы сделать поворотную дугу, которая представляет более реалистичное поведение, в идеале ограниченное скоростью и скоростью поворота.

Я искал примеры этого, такие как то, что описано в this article, но изо всех сил пытаюсь расширить информацию, которую я прочитал.

example of turning arc for realistic trajectories

Кто-нибудь знает о примере реализации этого поведения или, может быть учебник, который имеет некоторые примеры кода для работы с? Похоже, что это обычная вещь, которую нужно искать в игре AI, но большинство описаний, которые я нахожу, довольно высокого уровня.

Я отметил это сообщение Java, потому что это домен решения, в котором я работаю, но пример на другом языке может быть достаточным.

+0

Какой код вы пробовали? вопрос хорош, но плохо написан в его нынешнем виде – sircapsalot

ответ

0

Вы можете либо разработать математическую формулу (сложнее, но более эффективно) или придумать что-то вроде этого:

Imagine за рулем автомобиля, и что есть поворот (в точке А) после того, как по прямой дороге (точка W к точке А). Перед началом поворота у вас будет вектор скорости, указывающий вдоль дороги. Как только вы начнете поворот, у вас будет (увеличивающий) вектор скорости, указывающий вдоль поворота (от точки A до точки B) и вектор (убывающей) скорости, указывающий вдоль дороги. Вы можете вычислить полученный вектор скорости, добавив два вместе. Примерный алгоритм будет выглядеть так:

while(turning){ 
    straight_vector.magnitude = straight_vector.magnitude - 1; 
    turn_vector.magnitude = turn_vector.magnitude + 1; 

    resulting_vector = straight_vector + turn_vector; //vector addition 

    next_point.x = prev_point.x + resulting_vector.magnitude * Math.cos(resulting_vector.direction); 
    next_point.y = prev_point.y + resulting_vector.magnitude * Math.sin(resulting_vector.direction); 

    plot(next_point); 

    prev_point = next_point; 
} 

Вы можете использовать класс Vector3d в Java для представления векторов.

0

Геометрически и из рис. 2, я бы поехать на запад от точки W, пока я не попал в заштрихованную область, где у вас есть вектор R на юг. До этого момента это просто прямая линия. Затем вам нужно нарисовать дугу, чтобы отвести вас от линии, заканчивающейся до точки (0, 0). Вы рисуете дуги, используя информацию here. Вы создали полное приложение JavaFX, используя информацию here, чтобы нарисовать линии и дуги и многое другое. Вы должны определить координаты, чтобы параметризовать эти методы с помощью того, что это, это математика отсюда и далее.

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