У меня есть вектор с n строками с xy координатами точек. Эти точки составляют контур данной модели САПР. Теперь я хочу восстановить внешний вид модели. Поэтому я попытался разобраться с функцией atan2. Это код, который я использую для сортировки очков.Сортировка точек в векторе для формирования conture
std::sort(matrix.begin(), matrix.end(), sort1);
matrix.erase(std::unique(matrix.begin(), matrix.end(), compare2),matrix.end());
matrix.push_back(std::vector<double>(3, 0));
Итак, сначала я сортирую точки в векторной матрице. Как сравнить функции я использую этот код
bool sort1(vector<double> const& s1, vector<double> const& s2)
{
return atan2(s1[1],s1[0])<atan2(s2[1],s2[0]);
}
После того, как вектор был отсортирован, я просто удалить дубликаты, чтобы уменьшить размер вектора. Последний шаг - отбросить первую точку до конца вектора, чтобы закрыть контур. Для стандартных моделей, таких как куб или шар, это отлично работает, но для более сложных моделей функция atan2 замечает, что работает нормально. Итак, это изображение показывает несортированные точки.
Когда сортировать вектор я получаю эту Контурный как результат
Мой первый подход для проверки функции ATAN2, но работает отлично. Проблема, похоже, является результатом функции atan2. Так что этот список показывает фактические координаты и результат функции atan2
x y z atan2
-5.44283 -1.94995 0 -2.79758
-5.36969 -1.93228 0 -2.79617
-5.33637 -1.92454 0 -2.79547
-13.15 -4.76500 0 -2.79395
-5.26308 -1.90750 0 -2.79389
-5.22970 -1.90005 0 -2.7931
-5.15626 -1.88364 0 -2.79134
Как вы можете видеть, в то время как х и у координат изменить atan2 остается в том же диапазоне, что и другие значения. Для меня в этом проблема, почему мое убеждение неверно. Должен ли я добавить что-то к моей функции сортировки, чтобы получить правильные результаты?
Одна из моих идей заключалась в том, чтобы сортировать координаты не только с помощью atan2, но и по длине вектора между точкой, с наименьшим atan2 и всеми другими точками. Но вот моя проблема. Сначала я бы сортировал atan2, а затем сортировал по длине. Но второй процесс сортировки уничтожит результат отверстия первой функции сортировки.
Таким образом, atan2 не подходит для сортировки, и вы хотите знать, как сортировать, чтобы получить контур для любого заданного набора точек. Это, по-видимому, больше связано с математикой. – stefaanv
Для меня atan2 кажется хорошим началом для сортировки вектора. Но я думаю, что мне нужно больше, чем просто эта функция, чтобы отсортировать весь вектор. – user3794592
atan2 выполняет круговое сканирование, которое подходит для ограниченного набора точек, а не для более сложных контуров или контуров, где источник не внутри. – stefaanv