Узнайте, находится ли географическое положение на заданном расстоянии от линии между двумя другими позициями - PullRequest
0 голосов
/ 24 июня 2019

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

Линия представляет коридор заданной ширины. Мне нужна функция для возврата True, если я нахожусь в коридоре, False, если я на улице.

Эта ситуация вернет True:

corridor

Эта ситуация вернет False:

corridor

1 Ответ

0 голосов
/ 24 июня 2019

(отредактировано после комментария)

schema

Учитывая рисунок выше, ваша задача сводится к простой тригонометрической задаче.По сути, вам нужно вычислить d, а затем сравнить его с h.Если d больше и h, то точка C находится вне коридора, в противном случае точка C находится внутри коридора.

Расчет d

Расчетd так же просто, как применить несколько тригонометрических тождеств.

Во-первых, вы знаете, что скалярное произведение векторов AB и AC определяется как:

equation

, который позволяет рассчитать a:

cosa

Затем, используя обычные тригонометрические соотношения, выполучить:

cosa

, что превращается в:

cosa

, которые выможно рассчитать, так как у вас есть выражение для a.

Расчет d'

Это снова просто тригонометрия:

cosa

Функция предиката

Эта функция принимает как минимум 4 аргумента в качестве входных данных:

h - ширина коридора A - координаты точки A B - координаты точки B C - координаты точки C

Внутри функции вам необходимо:

  1. Рассчитать векторы AB и AC
  2. Рассчитатьd
  3. Рассчитать d'
  4. Если d' <0 или <code>d'> || AB ||, вернуть false
  5. Если d <=<code>h вернуть true, false иначе

Принимая размеры A, B и C, если вы знаете, что их форма не слишком сложна.По сути, вам нужно изменить тесты в точках 4 и 5 выше, чтобы учитывать фактический размер объектов.

(например, если вы предполагаете, что A и C являются сферами, то вам нужночтобы убедиться, что hh <<code>d' <|| AB || - hh, где hh - сумма радиусов <code>A и C)

...