У меня есть несколько тысяч ячеек тетраэдров, которые генерируются для моделирования. У меня есть информация о вершинах и поверхностях, которые индексируются на две матрицы, некоторые из которых связаны друг с другом. Узлы поверхностей связаны с матрицей вершин. Я хочу найти, какие вершины связаны друг с другом, чтобы образовать тетраэдры. Существует ли алгоритм обнаружения связности вершин, образующих ребра тетраэдров?Алгоритм поиска краев ячеек тетраэдров
ответ
Если матрица узел представляет собой матрицу смежности, т.е. ближайших соседей, а затем выбрать любую вершину, остальные три остальные вершины некоторых тетраэдра она образует должны удовлетворять:
(я) они являются непосредственными соседями выбранная вершина,
(ii) Они являются ближайшими соседями друг другу. Если это не так, вы получите тетраэдры, пересекающие друг друга.
Если я неправильно понял ваше заявление, т.е. это не матрицы смежности, то вам придется сделать 3D-версию триангуляционной, т.е. вычислительного график ячейки 3D Вороного для вашего облака точек , https://en.wikipedia.org/wiki/Voronoi_diagram
Эта ссылка может помочь вам найти алгоритм. http://mathworld.wolfram.com/Tetrahedron.html
Начиная из списка, возможно, дублированных краев:
Предположим, что вы получили файл ASCII с возможно дублировать края. В системе Unix, вот простой способ извлечения из него список уникальных краев:
cat edges.txt | awk '{printf "%d %d\n", ($1 < $2 ? $1 : $2), ($1 > $2 ? $1 : $2)}' | sort | uniq > unique_edges.txt
Что он делает:
- Команда «AWK» гарантирует, что в каждом ребре, вершины нижнего id на первом месте (таким образом, в файле будет один способ представления одного и того же ребра)
- Команда сортировки сортирует все строки. Это гарантирует, что все дублированные края вместе
- команда «уник» подавляет дублированные строки
Если вы под Windows, вы можете установить Cygwin (иметь AWK, сортировать и уник). Также довольно легко сделать что-то подобное на других языках сценариев (например, perl).
Начиная из списка тетраэдров:
Теперь, если вы начинаете с файлом с тетраэдров, вы можете создать список (дублируется) ребер следующим образом (то вы можете выполнить команду выше, чтобы удалить дубликатов):
cat tetrahedra.txt | awk '{printf "%d %d\n%d %d\n%d %d\n%d %d\n%d %d\n%d %d\n", $1, $2, $1, $3, $1, $4, $2, $3, $2, $4, $3, $4}' > edges.txt
Что делает: он генерирует для каждого тетраэдра его 6 ребер, одно ребро в каждой строке.
Очевидно, что вы можете комбинировать обе команды, чтобы напрямую извлекать уникальный список ребер из файла тетраэдров.
- 1. Алгоритм поиска краев неизвестного # форм
- 2. Лучший алгоритм для поиска краев (многоугольников) вершин
- 3. Быстрый алгоритм поиска минимального пути отключенных краев
- 4. Алгоритм сглаживания краев многоугольника
- 5. Алгоритм для поиска соседних ячеек в матрице
- 6. алгоритм поиска пустых ячеек в minesweeper
- 7. Алгоритм поиска избыточных краев в графе или дереве
- 8. Алгоритм для уникальных краев поиска из многоугольной сетки
- 9. Dijkstra Алгоритм множественных краев найти минимум
- 10. Краткий алгоритм кратчайшей пары краев в Java?
- 11. Алгоритм поиска кратчайшего расстояния, охватывающего наименьшее количество ячеек
- 12. Нерекурсивный алгоритм для прохождения краев диаграммы Вороного с boost :: polygon
- 13. Алгоритм решения точек и ячеек
- 14. Как использовать алгоритм Диникова для поиска краев с минимальным разрезом в нулевом графике?
- 15. Алгоритм поиска пути в непрерывном пространстве
- 16. Эффективный кортеж алгоритм поиска
- 17. алгоритм поиска близких друзей?
- 18. Алгоритм поиска текста
- 19. Алгоритм поиска положения тени
- 20. Алгоритм поиска радиальной сетки
- 21. алгоритм поиска списков
- 22. Алгоритм поиска шаблона
- 23. Алгоритм поиска скользящего окна
- 24. Алгоритм поиска набора соединений
- 25. Ускорить алгоритм Строка поиска
- 26. Как реализовать алгоритм поиска
- 27. Алгоритм внешнего поиска
- 28. C++ Линейный алгоритм поиска
- 29. Масштабируемый алгоритм поиска SQL
- 30. прыжок алгоритм поиска
Трудно понять из вашего вопроса, не могли бы вы дать дополнительную информацию: (1) что у вас есть в качестве входных данных? У вас есть тетраэдры, а также название вопроса sugests? (2) вы хотите вычислить связность вершин, но в какой форме? список всех ребер? связность вершин в виде матрицы? – BrunoLevy
Я использовал эйдоры и netgen для создания своих моделей. У меня есть вся информация включает в себя симплексы и вершины, которые я получил из файла .vol, созданного netgen. Однако информация о краях, которая также является связностью между вершинами, образующими края тетраэдрических элементов, является неточной. У него много дублирующих значений, которые должны были быть в порядке. – Gaze