Русская Википедия:Изоповерхность
Изоповерхность — это трёхмерный аналог изолинии, то есть поверхность, представляющая точки с постоянным значением (например, давления, температуры, скорости или плотности) в некоторой части пространства. Другими словами, это множество уровня непрерывной функции, областью определения которой является трёхмерное пространство.
Термин «изоповерхность» иногда используется для более общих областей с размерностью большей 3Шаблон:R.
Приложения
Изоповерхности обычно выводятся с помощью компьютерной графики и используются в качестве методов визуализации в вычислительной гидродинамике, позволяющий инженерам изучать свойства обтекания (газом или жидкостью) объектов, таких как крыло самолёта. Изоповерхность может представлять индивидуальную ударную волну сверхзвукового полёта, или могут быть созданы некоторые изоповерхности, показывающие последовательность значений давления в потоке воздуха, обтекающего крыло. Изоповерхности становится популярным видом визуализации пространственных наборов данных, поскольку могут быть обработаны простой многоугольной моделью и нарисованы на экране очень быстро.
В медицинской визуализации изоповерхности могут быть использованы для представления областей с определённой плотностью в трёхмерной компьютерной томографии, что позволяет визуализацию внутренних органов, костей и других структур.
Многочисленные другие дисциплины, в которых используются трёхмерные данные, часто используют изоповерхности для получения информации в областях фармакологии, химии, геофизики и метеорологии.
Алгоритмы реализации
Алгоритм «Marching Cubes»
Алгоритм «marching cubes» впервые опубликован в 1987 году в сборнике работ конференции SIGGRAPH (авторы — Лоренсен и КлайнШаблон:Sfn). Алгоритм создаёт поверхность по пересечениям рёбер объёмной решётки с поверхностью тела. В точке, где поверхность пересекает ребро, алгоритм создаёт вершину. С использованием таблицы различных треугольников, определяемых различными шаблонами пересечений рёбер, алгоритм воспроизводит поверхность. Этот алгоритм имеет решения для реализации как в CPU, так и в GPU.
Алгоритм «Asymptotic Decider»
Алгоритм Шаблон:Не переведено 5 разработан как развитие алгоритма «marching cubes», чтобы избавиться от неопределённости в алгоритме.
Алгоритм «Marching Tetrahedra»
Алгоритм Шаблон:Не переведено 5 разработан как развитие алгоритма «marching cubes» с целью избавиться от неопределённости в алгоритме и создавать более качественные поверхности.
Алгоритм «Surface Nets»
Алгоритм «Surface Nets» помещает вершину пересечения в середину вокселя, а не на рёбрах, что приводит к более гладкой поверхности.
Двойственное контурирование
Алгоритм двойственного контурирования впервые опубликован в 2002 году в сборнике работ конференции SIGGRAPH (авторы Ю и ЛосассоШаблон:R). Алгоритм разработан как расширение одновременно алгоритмов «surface nets» и «marching cubes». Алгоритм сохраняет двойственную вершину внутри вокселя, но не обязательно в центре. Двойственное контурирование максимально использует положение и нормаль, где поверхность пересекает рёбра вокселя, чтобы интерполировать положение двойственной вершины внутри вокселя. Это позволяет создавать ровные или гладкие поверхности, поскольку поверхностная сетка часто выглядит глыбистой или неверно скошенной[1]. Двойственное контурирование часто использует построение поверхностей с помощью октодеревьев для оптимизации числа треугольников в результирующем представлении поверхности.
Двойственное контурирование многообразия
Двойственное контурирование многообразия включает анализ соседей узла октодерева для поддержки непрерывности поверхности многообразияШаблон:RШаблон:RШаблон:R.
Примеры
Примерами изоповерхностей являются «метасферы», используемые при трёхмерной визуализации. Более общим способом построения изоповерхности является использование Шаблон:Не переведено 5.
См. также
Примечания
Литература
Ссылки
- Разбиение изоповерхности на многоугольники
- The contourist package for numeric python создаёт триангуляризации изоповерхностей для произвольных трёхмерных функций, которые могут быть отрисованы с помощью HTML5 (как проиллюстрировано на странице jsfiddle)