Существует ли известный алгоритм для получения относительного местоположения n неизвестных точек на основе известных расстояний между ними? - PullRequest
1 голос
/ 10 октября 2019

У меня есть набор из 10 точек в трехмерном пространстве. единственная информация, которую я имею, - это расстояние от каждой точки до любой другой точки.

Я могу произвольно установить одну точку как (0,0,0), а другую - как мою ось X (расстояние, 0,0).

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

Достаточно ли у меня достаточно? информация для этого? Есть ли существующий алгоритм, на который я должен смотреть?

1 Ответ

0 голосов
/ 10 октября 2019

Для первых трех точек я могу:

//store first one as zero point

        if (pos.id == 0)
        {
            pos.position = Eigen::Vector3d(0, 0, 0);    
        }

        //store second as X axis
        if (pos.id == 1)
        {
            pos.position = Eigen::Vector3d(<Distance from 1 to 2>, 0, 0);
        }

        //triangulate third from distances
        if (pos.id == 2)
        { 
            double c =  //distance from 3 to 1
            double b =  //distance from 3 to 2
            double a =  //distance from 1 to 2

            pos.position.x() = (c*c - b * b + a * a) / (2 * a);
            pos.position.y() = std::sqrt(c*c - pos.position.x()*pos.position.x());



        }

код для третьей точки из здесь

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

...