надежная и гибкая трехмерная структура данных - PullRequest
4 голосов
/ 27 февраля 2009

Я ищу концепцию для хранения (в 3-мерном евклидовом пространстве) граней, ребер и вершин, чтобы

  • информация (об отношении) не дублируется
  • Запросы для примыкающих и соседних граней / ребер / вершин выполняются быстро
  • сетка не ограничена соединенными гранями одной и той же обмотки

Определения

  • сосед лица: лицо, которое имеет грань с этим лицом
  • сосед вершины: вершина, которая находится на другом конце ребра, разделяющего эту вершину
  • adjecent edge: ребро, которое разделяет ту же вершину конечной точки с этим ребром

Я рассмотрел структуру данных Half-Edge, но запросы к ней действительно работают, только когда все связанные грани имеют одинаковую обмотку.

Например, рассмотрите этот псевдокод для доступа к таким связанным объектам:

face.neighbors #the neighboring faces
face.edges #the edges shared by this face (in the right winding order)
face.verts #the vertex of that face (in the right winding order)
edge.v1, edge.v2 #the two vertex making up an edge
vertex.edges #the edges this vertex shares
vertex.neighbors # the neighbors of this vertex along each shared edge

Ответы [ 5 ]

2 голосов
/ 27 февраля 2009

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

Одной из идей может быть сохранение пары (один элемент для каждой обмотки) в структуре данных для грани; это может дать вам достаточную гибкость для реализации некоторой структуры данных, подобной половине ребра, с хорошей эффективностью.

1 голос
/ 09 сентября 2011

Предлагаю вам также взглянуть на OpenMesh . Это также тяжело на стороне шаблона C ++, как CGAL. ​​

0 голосов
/ 09 сентября 2011

Я нашел реферат о структуре данных для 3d-сетки. http://wscg.zcu.cz/wscg2006/Papers_2006/Short/E17-full.pdf

0 голосов
/ 13 июля 2010

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

0 голосов
/ 28 февраля 2009

Не столько рекомендуемая структура, сколько трехмерная библиотека, используемая профессионалом для вычислительных задач, на которую можно построить.

Майкл Гарланд, исследователь из NVIDIA Research, выпустил свою графическую библиотеку, которую он использует для вычислительных задач на трехмерных моделях и сетках.

  • libgfx
  • qslim приложение для упрощения сетки на основе libgfx (я лично использовал его и портировал qvis в MacOSX)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...