У меня есть набор трехмерных точек (которые я восстанавливаю из библиотеки, которая выполняет тесселяцию твердого тела), которые принадлежат кривой (то есть краю твердого тела). Это означает, что кривая обязательно проходит по каждой из этих точек.
Тем не менее, набор точек неупорядочен, поэтому мне нужно отсортировать их, чтобы правильно нарисовать эту кривую.
Есть ли какой-либо известный подход для такого рода проблем?
Некоторая дополнительная информация:
- Кривые в целом являются параметрическими (сплайны / Безье, круговые срезы ..).
- Точки даны как координаты с плавающей точкой.
- Точки упакованы очень плотно (но они могут быть настолько плотными, насколько я хочу). Чтобы дать вам представление, для кривой, которая занимает 19 единиц в x, 10 единиц в x и 5 единиц в z, я процитирую последовательность точек в сегменте кривой: (20.7622, 25.8676, 0) (20.6573, 25.856, 0) (20,5529, 25,8444, 0) (20,4489, 25,8329, 0) (20,3454, 25,8213, 0)
Ответы:
У вас есть пример проблемы, которая называется реконструкция кривой из неорганизованных точек . Теперь, когда вы знаете, что искать, вы найдете несколько методов, таких как crust, NN-crust и т. Д. Вот несколько ссылок:
Апплет реконструкции кривой коры
Кривая Реконструкция Тамал Дей
Восстановление кривой и поверхности: алгоритмы с математическим анализом , книга Тамала К. Дея, издательство Кембриджского университета, 2006
Поскольку вы имеете дело с кривыми, а выборки плотные, я предлагаю вам вычислить евклидово минимальное остовное дерево.
источник
После некоторых разъяснений, возможно, существует гораздо лучший подход, который даже не требует знания параметрической формы кривой, а также избегает потенциально проблематичного шага минимизации чисел.
Если кривая не пересекает себя и точки достаточно плотно упакованы на кривой (и я имею в виду, что они должны быть ближе, чем любые две точки на кривой, которые не принадлежат одному сегменту, например, путем обтекания кривой вокруг себя), то вы можете легко определить предыдущую и следующую точку для каждого образца:
источник
источник