Как отсортировать связку многоугольников / многогранников по определенному значению в их вершинах (или некоторой другой мере расстояния) - PullRequest
0 голосов
/ 14 апреля 2009

Я работаю над проектом, который будет использовать большие наборы данных (как 2D, так и 3D), которые я буду превращать в треугольники или тетраэдры для их рендеринга.

Я также буду выполнять расчеты для этих трис / тет. Какие трис / тет используются для каждого вычисления, зависят от наибольших и наименьших значений их вершин.

Так что мне нужно отсортировать трис / тетс в порядке их наибольшей ценности.

-

Я пробовал быструю сортировку и сортировку бинарных вставок. До сих пор Quicksort предлагает самое быстрое решение, но оно все еще довольно медленное из-за размера наборов данных.

Во время создания трис / тетс я размышлял по типу ведра / карты; блок для каждой из встречающихся вершин с наибольшим значением, добавляя указатели на треугольники, у которых все это значение равно значению их вершины с наибольшим значением.

Этот подход должен быть линейным во времени, но, очевидно, требует больше памяти. Это не проблема, но мой язык программирования - c. И я не совсем уверен, как бы я решил написать такую ​​вещь.

Итак, мой вопрос к вам: как бы вы получили треугольники / теты таким образом, чтобы вы могли перебирать их, из треугольника, вершина которого с наибольшим значением из 3 его вершин, является самой значимой весь набор данных, вплоть до треугольника с наименьшим наибольшим значением вершины? :)

Ответы [ 2 ]

0 голосов
/ 14 апреля 2009

Вы можете использовать приоритетную очередь на основе структуры данных кучи . Это также даст вам O(log(n)) для вставки и извлечения.

0 голосов
/ 14 апреля 2009

Разве вы не можете просто сохранить их в бинарном дереве поиска по мере их генерации? Это будет держать их в порядке и легко найти (O(log(n)) для вставки и поиска)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...