Я бы собрал некоторую информацию о каждой точке: информацию, которая зависит только от «формы», а не от фактического перемещения / поворота. Например, это может быть сумма всех расстояний между точкой и любой другой точкой фигуры. Или это может быть самый большой угол между любыми двумя точками, если смотреть из рассматриваемой точки. Выберите любой показатель c, обеспечивающий наибольшее разнообразие.
Затем отсортируйте точки по этому метри c.
Проделайте то же самое для обеих групп точек.
Как На первом этапе вы можете сравнить обе группы по их отсортированному списку показателей. Оставьте небольшую погрешность, поскольку вы будете иметь дело с ограничениями точности с плавающей запятой. Если они не могут быть сопоставлены друг с другом, прервите алгоритм: они имеют разные формы.
Теперь переведите набор точек так, чтобы первая точка в упорядоченном списке была сопоставлена с исходной точкой (0, 0, 0) , т.е. вычесть первую точку из всех точек в группе.
Теперь поверните набор точек вокруг оси Y так, чтобы вторая точка в упорядоченном списке совпадала с плоскостью XY. Поверните точку, установленную вокруг оси Z, так, чтобы эта точка совпадала с осью X: она должна соответствовать (d, 0, 0), где d - это расстояние между первой и второй точкой. в отсортированном списке.
Наконец, поверните набор точек вокруг оси X, чтобы третья точка в упорядоченном списке совпадала с плоскостью XY. Если эта точка совпадает с предыдущими точками, вам нужно продолжать делать это со следующей точкой (точками), пока вы не повернете неколинеарную точку.
Сделайте это с обеими группами точек. Затем сравните преобразованные таким образом координаты обоих списков.
Это основной алгоритм, но я пропустил случаи, когда значение metri c одинаково для двух точек, и, таким образом, отсортированный список может иметь перестановки без нарушения порядка сортировки:
В этом случае вам необходимо выполнить указанные выше преобразования с различными перестановками этих равнозначных точек в начале отсортированного списка, пока нет соответствия. 1021 *
Кроме того, проверяя соответствие, вы должны принять во внимание, что совпадающие точки могут быть не в том же порядке, что и в отсортированном списке другой группы, и вам следует проверить следующие точки, которые имеют такие же метри c тоже.