Рассчитать направление движения объекта - PullRequest
0 голосов
/ 11 июня 2018

Учитывая многомерное пространство и целевое положение и скорости движущегося объекта, как определить, движется ли объект в правильном направлении, следовательно, приближаясь к цели?

Например, если у меня есть 3-D пространство, у меня есть желаемое целевое положение [0, 0, 100], я знаю, что мой движущийся объект движется со скоростью [1, 2, 4], как рассчитать расхождение между направлением движения и желаемымнаправление?

Обратите внимание, я не использую единство

1 Ответ

0 голосов
/ 12 июня 2018

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

Настройка

(Примечание: это будет включать векторы. Если переменная выделена жирным шрифтом, ярассматривая это как вектор.)

Итак, мы хотим достичь P f = [0, 0, 100] единиц.Мы находимся в P i = [x i , y i , z i ] единиц.У нас скорость v = [1, 2, 4] единиц / кадр.

Если я правильно понимаю, мы хотим знать две вещи:

  1. Попадем ли мы в цель?
  2. Если нет, то как далеко мы будем?(То есть: какой угол между тем, куда мы идем и куда мы хотим идти?)

Выполнение

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

Для решения второй части наш лучший друг - точечный продукт !Ваша проблема связана с векторами, и скалярное произведение может сказать нам, насколько тесно связаны два вектора.

Во-первых, нам понадобятся наши два жертвы вектора.У нас уже есть один: v , текущая скорость.Затем, предполагая, что у нас есть P i , мы можем найти желаемый путь, который является путем между P i и P е .Я назову это s f = P f - P i .

(из-за отсутствия символа, используемого для точечного произведения, точка ( m , n ) будет означать произведение точки m и n .)

Сначала мы начнем с одного из определений точечного произведения, представленного в статье в Википедии:

(Equ 1)
точка ( v , s f ) = || v |||| S е ||cos (Ɵ)

Краткое примечание: двойные столбцы означают звездную величину , что равно сумме квадратов компонент вектора, или

|| v ||= sqrt (v x 2 + v y 2 + v z 2 )

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

В любом случае,(Equ 1) недостаточно!Мы не знаем Ɵ или точку ( v , s f ), так что теперь?

Есть другое определение точечного продукта вта первая статья в Википедии.Это выглядит так:

(Equ 2)
точка ( v , s f ) = v x s fx + v y s fy + v z s fz

Мы знаем все эти ценности!И, поскольку (Equ 1) равно (Equ 2), мы можем объединить эти два уравнения.Это дает нам:

|| v |||| S е ||cos (Ɵ) = v x s fx + v y s fy + v z s fz

Aaand перетасовывает вещи вокруг ...

cos (Ɵ) = (v x s fx + v y s fy + v z s fz ) / (|| v || || s f ||)
... или ...
Ɵ = cos -1 ((v x с fx + v y s fy + v z s fz ) / (|| v || || s f ||))

И это наше окончательное уравнение!

ПРАЗДНОВАТЬ !!!

Ну ... теперь мы должны его использовать.Если вы не математик (или если мое объяснение было ужасным и я вас где-то потерял), я расскажу, что может сделать для нас это последнее уравнение.

Результат последнего уравнения определяет угол, на который мы находимся.Он будет в диапазоне от 0 градусов до 180 градусов (или от 0 радиан до π радиан).0 градусов означает, что мы движемся прямо к цели, а 180 градусов означает, что мы движемся прямо от нее.

Если либо || v ||или || с f ||равны нулю, , тогда это уравнение неверно .Это имеет смысл;если мы уже находимся на вершине нашей цели, расстояние для перемещения равно нулю, и нет никакого угла для вычисления.В то же время, если скорость равна нулю, то мы никуда не денемся и не можем рассчитать угол.Обратите внимание, что величина вектора равна нулю, если все его значений равны нулю, так что это простая проверка.

Математика хороша и все, но ...

Я изложу это в терминах, которые должны выглядеть более знакомыми для кодировщиков.

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