Вашей первой мыслью может быть попытка найти вращение, которое отображает один объект на другой, но это очень и очень сложная тема ... и на самом деле в этом нет необходимости! Вы не спрашиваете, как лучше всего соответствовать двум, вы просто спрашиваете, являются ли они одинаковыми или нет.
Охарактеризуйте вашу модель списком всех промежуточных расстояний. Сортировать список по этому расстоянию. Теперь сравните список для каждого объекта. Они должны быть идентичными, поскольку расстояния между точками не зависят от перемещения или поворота.
Три вопроса:
1) Что, если количество точек велико, это большой список пар (N * (N-1) / 2). В этом случае вы можете выбрать оставить только самые длинные или, что еще лучше, оставить 1 или 2 самых длинных для каждой вершины, чтобы каждая часть вашей модели имела некоторый вклад. Однако отбрасывание подобной информации меняет проблему на вероятностную, а не детерминированную.
2) При этом используются только вершины для определения формы, а не ребра. Это может быть хорошо (и на практике будет), но если вы ожидаете, что у вас будут фигуры с одинаковыми вершинами, но разными соединительными ребрами. Если это так, сначала проверьте сходство вершин. Если это пройдет, тогда назначьте уникальную маркировку каждой вершине, используя это отсортированное расстояние. Самый длинный край имеет две вершины. Для каждой из этих вершин найдите вершину с самым длинным (оставшимся) ребром. Пометьте первую вершину 0 и следующую вершину 1. Повторите процедуру для других вершин по порядку, и вам будут назначены теги, которые не зависят от сдвига и вращения. Теперь вы можете точно сравнивать топологии ребер (проверьте, что для каждого ребра в объекте 1 между двумя вершинами существует соответствующий ребро между теми же двумя вершинами в объекте 2). необходимо сопоставление связей, чтобы сделать задания стабильными и уникальными.
3) Существует вероятность того, что две фигуры имеют одинаковую длину ребер, но они не идентичны ... это верно, когда один объект является зеркальным отражением другого. Это довольно раздражает, чтобы обнаружить! Один из способов сделать это - использовать четыре некомпланарные точки (возможно, те, которые отмечены от 0 до 3 из предыдущего шага) и сравнить «управляемость» системы координат, которую они определяют. Если вручение не совпадает, объекты являются зеркальными изображениями.
Обратите внимание, что список расстояний позволяет легко отбрасывать неидентичные объекты. Это также позволяет добавить «нечеткое» принятие, допуская определенное количество ошибок в заказах. Возможно, хорошо бы использовать среднеквадратичную разницу между двумя списками в качестве «меры сходства».
Редактировать: похоже, ваша проблема - облако точек без краев. Тогда надоедливая проблема соответствия краев (# 2) даже не применяется и может быть проигнорирована! Вы все еще должны быть осторожны с проблемой зеркального отображения # 3.