Я много играл с методами расчета траектории, когда пытался создать реалистичные последовательности полетов, которые будут отображаться в Teragen .Сначала я попытался использовать Кривые Безье .
Но обнаружил, что (по крайней мере, для полетов) они не так полезны.Причина в том, что кривизна между кривыми является прерывистой, и поэтому ее нельзя использовать для расчета непрерывного правильного угла крена для пролета.Также трудно быть уверенным, что кривая не пересекает гору.
Я отступаю.В конце концов я остановился на простом пути, основанном на массе и пружине, и превратил его в представление.
Разделите путь на множество маленьких сегментов, чем больше, тем лучше.Для каждой точки немного сместите ее в направлении, чтобы уменьшить угол между ней и ее соседями и расстояние от препятствий.Повторяйте много раз, пока путь не уляжется.
k = 0.01 // Adjust the values of k and j to your liking.
j = 0.01 // Small values take longer to settle. Larger values are unstable.
For each point P
normal_vector = vector_to_previous_point + vector_to_next_point
obstacle_vector = vector_to_nearest_obstacle
obstacle_distance = magnitude(obstacle_vector)
obstacle_vector *= obstacle_distance^2
P += (normal_vector * k) - (obstacle_vector * j)
Преимущество такого рода методов релаксации конечных элементов заключается в том, что вы можете запрограммировать в нем все виды ограничений, и путь будет определяться компромиссом междуих, в зависимости от весов (в данном случае j и k).
Если вы увлекаетесь робототехникой, почему бы не присоединиться к Robotics Proposal *1021*?