#geometry #mesh #vtk #area #triangulation
Вопрос:
У меня есть две триангулированные сетки m
m1
со следующими свойствами:
m_faces: 16640
m_points: 49920
m_surface_area: 178.82696989147524
m1_faces: 8
m1_points: 24
m1_surface_area: 1.440205667851934
Теперь я хотел бы разделить m1
его так, чтобы он имел ок. тот же номер лица m
, что и, например, 16640. Я использую библиотеку vtk и, более конкретно, функцию vtkAdaptiveSubdivisionFilter (), которая в соответствии с описанием:
…is a filter that subdivides triangles based on maximum edge length and/or triangle area.
Мой вопрос в том, как вычислить максимальную длину ребра, в соответствии с некоторыми пробами и ошибками я обнаружил, что это должно быть значение, между [0.0188-0.0265]
которым у меня 16384 грани. Однако я не смог найти ни одной формулировки, которая давала бы число в этом диапазоне соотношений и была бы последовательной в разных случаях. Есть идеи, как рассчитать эту максимальную длину ребра каждый раз?
В другом примере у меня есть следующие две сетки:
Sph1_faces: 390
Sph1_points: 1170
Sph1_surface_area: 1.9251713393584104
Sph2_faces: 1722
Sph2_points: 5166
Sph2_suface_area: 10.59400389764954
И для получения Sph1
числа граней, близкого к Sph2
числу граней, максимальная длина ребра должна быть между [0.089-0.09]
ними, что дает мне 1730 граней для Sph1
.
Я попытался использовать формулировку площади равностороннего треугольника, сделав соответствующее предположение, а затем решив для стороны и разделив на количество граней или точек, но, похоже, это не сработало. Таким образом, любая другая идея будет оценена по достоинству.
Спасибо.
Комментарии:
1. Боюсь, что очень трудно предсказать результат такого адаптивного алгоритма. Особенно, если ваш ввод очень нерегулярен. И что еще более важно, потому что в документации не указано, какой алгоритм используется. Но ваш подход к использованию равностороннего предположения кажется разумным (поскольку это обычно является одной из целей алгоритмов разделения). Для ваших примеров я получаю длины ребер
0.01413
и0.05081
, соответственно , которые не слишком далеки от ваших интервалов. Разве результаты, которые вы получаете с этими цифрами, не удовлетворительны?2. Я думаю, что вы правы, действительно трудно заставить его работать последовательно. Нет, числа, которые должны работать в соответствии с моими потребностями, должны находиться между диапазонами, которые я предоставляю. В любом случае, я отказался от
vtkAdaptiveSubdivisionFilter()
этого после применения разных вещей. Теперь мой альтернативный обходной путь состоял в том, чтобы использоватьvtkLinearSubdivisionFilter()
до нескольких граней, которые больше той суммы, которую я хочу, а затем уменьшить до точного числа. На данный момент это, кажется, работает нормально.