«Дай мне место, на котором я буду стоять, и я переверну Землю» Архимед
Я думаю, что мы должны следовать шагам Архимеда
Алгоритм Арпи:
Мы должны выбрать точку (X1) множества A с координатами (0, 0). (это место, где можно стоять)
Выберите другую точку (X2) и поместите ее в вектор OX (для упрощения)
Координаты всех остальных точек из набора A будут рассчитываться на основе координат X1 (0, 0) и X2 (some_Coordinate, 0).
Теперь выберите точку из набора B (Y1), и она будет центром набора B. Выберите другую точку из набора B (Y2) и поместите ее в OX из набора B. Теперь у нас есть скалярная шкала и угол поворота. Если это будет решением, тогда Y1 в наборе B представляет X1 из набора A, а Y2 из набора B представляет X2 из набора A. Если мы сможем найти карту между множеством B и множеством A на основе этого, используя все точки множества B и Yi <> Yj, если i <> j, где i и j - индексы точек в нашем представлении, чем У нас есть потенциальное решение, и мы храним это.
Конец алгоритма Арпи
Чтобы найти все потенциальные решения, вы должны сделать следующее:
foreach point in A as X1 do
foreach point in A as X2 do
arpi's algoritm(X1, X2)
Конечно, вы можете оптимизировать это, но для простоты я описал это без оптимизаций (осложнений), ваша задача будет оптимизировать это и только если вам это нужно.