2d трилатерация

Я пишу код для участия в соревновании с ИИ. Основная цель задачи ИИ — взять смоделированного робота и провести его через лабиринт к целевой зоне. Второстепенная цель, которая не является обязательной, - найти зарядное устройство, расположенное в лабиринте в неизвестном месте. Все это делается в 2D сетке.

Моя программа может вызвать метод для измерения расстояния от зарядного устройства. Таким образом, используя трилатерацию, я должен найти зарядное устройство, вызвав этот метод, записывая текущую позицию моего ИИ и расстояние, на котором зарядное устройство находится от этой точки, 3 раза.

Я нашел этот пример трилатерации в Википедии http://en.wikipedia.org/wiki/Trilateration. но это относится к 3d пространству. Я имею дело только с 2D-пространством. Также я не понимаю, как использовать формулу, показанную в Википедии, поиск в Интернете рабочего примера с подключенными числами и сведение к окончательным координатам скудны при поиске в Google.

Я не математик; Я просто энтузиаст, изучающий проблемы ИИ.

Объяснение и пошаговый пример того, как вычислить задачу, это то, что мне нужно, так как математика не является моей сильной стороной. Ниже приведены некоторые примеры данных:

  • Точка 1: x=39, y=28, расстояние=8
  • Точка 2: x=13, y=39, расстояние=11
  • Точка 3: x=16, y=40, расстояние=8

Будем очень признательны за любой пример с использованием моих образцов данных. Программирование для этого будет очень простым, как только я смогу окунуться в математику.


person Nebri    schedule 17.03.2012    source источник
comment
Просто возьмите 3D-формулы и установите высоту на ноль.   -  person Don Reba    schedule 17.03.2012
comment
Это определенно сработает, но я не знаю, как использовать формулу в Википедии. Я ищу пошаговый пример того, как выполнить расчеты.   -  person Nebri    schedule 17.03.2012
comment
Могу я спросить, какое испытание ИИ?   -  person gak    schedule 18.03.2012
comment
www2.mohawkcollege.ca/events/amazebot Вызов amazebot от Mohawk College. Это отличный академический проект. Это чисто необязательно, оценки за это не выставляются.   -  person Nebri    schedule 18.03.2012


Ответы (1)


Как описано в статье в Википедии, координаты (x,y) вычисляются путем последовательного вычисления: e< sub>x, i, ey, d, j, x, y. Вы должны быть знакомы с векторной записью, поэтому, например, ex = (P2 - P1) / ‖P2 - P1‖ означает:

  • ex,x = (P2x - P1x) / sqrt((P2x - P1x)2 + (P2y - P1y)2)
  • ex,y = (P2y - P1y) / sqrt((P2x - P1x)2 + (P2y - P1y)2)

Ваши данные:

  • Р1 = (39, 28); г1 = 8
  • Р2 = (13, 39); г2 = 11
  • Р3 = (16, 40); г3 = 8

Этапы расчета:

  1. ex = (P2 – P1) / ‖P2 – P1‖
  2. я = еx(P3 - P1)
  3. ey = (P3 - P1 - i · ex) / ‖P3 - P1 - i · ex
  4. d = ‖P2 - P1‖
  5. j = ey(P3 - P1)
  6. x = (r12 - r22 + d2) / 2д
  7. y = (r12 - r32 + i2 + j 2) / 2j - ix / j
person Don Reba    schedule 17.03.2012
comment
отлично спасибо. Теперь я могу понять, откуда берутся эти переменные. Конечно, мне придется немного попрактиковаться с векторами, но это хорошее начало. Спасибо Дон :). - person Nebri; 18.03.2012
comment
и последний шаг для получения реальных координат неизвестной точки, как сообщает Wiki, выглядит следующим образом: 8. p1,2 = P1 + x*ex + y*ey дает точки в исходной системе координат, поскольку ex и ey, базовые единичные векторы, выражаются в исходной системе координат. -- комментарий к правке анонимного пользователя - person Dariusz; 09.05.2013
comment
stackoverflow.com/questions/23400351/ не могли бы вы также проверить этот пост, пожалуйста? - person padawan; 01.05.2014
comment
@OnurÇağırıcı, слишком далеко? Это может означать, что введены неверные координаты. Например, это могут сделать коллинеарные координаты. - person Don Reba; 27.05.2014
comment
@DonReba Я проверяю коллинеарность. Мои баллы: [-0.8092775327548827, -19.576297388406005, 0.0], [0.8541381922861269, -9.975819993705937, 0.0] и [-0.597554605602997, -18.347159283433726, 0.0]. y = 13233.037425080443. - person padawan; 27.05.2014