Визуализация поверхностей уровня - PullRequest
4 голосов
/ 13 января 2011

Я пытаюсь разработать визуализатор поверхности уровня, используя этот метод (не знаю, является ли это стандартным методом или есть что-то лучше):

Проблема, с которой я сталкиваюсь, связана с шагом 4. У меня нет возможности заранее узнать, сколько возможных значений y будет удовлетворять этому уравнению (точнее, сколько уникальных и реальных значений y).

Кроме того, я стараюсь сделать программу как можно более общей, поэтому я стараюсь не ограничивать исходную функцию f(x,y,z)=k любыми ограничениями, такими как гладкость или полином, кроме k, которые должны быть постоянными, как требуется для уровня поверхность.

Существует ли алгоритм (без использования CAS / символьного решения), который может идентифицировать корень (и) функции, даже если она имеет несколько корней? Я знаю, что методам деления пополам трудно из-за возможности изменения знака в регионе, но как поживает метод секущих / ньютонов? На каком наборе функций может использоваться метод секущих / ньютонов, и может ли он обнаруживать и находить все уникальные реальные корни в двух заданных границах? Или есть лучший метод для создания / визуализации поверхностей уровня?

Ответы [ 3 ]

2 голосов
/ 28 августа 2012

Если вам нужен пример алгоритма «Марширующие кубики», посмотрите

http://stemkoski.github.com/Three.js/Marching-Cubes.html

(использует JavaScript / Three.js для графики).

Для более подробной информации о теории, вы должны проверить статью в

http://paulbourke.net/geometry/polygonise/

2 голосов
/ 13 января 2011

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

1 голос
/ 13 января 2011

Простой способ,

2D: график (x, y) с цветом = пол (q * f (x, y)) в оттенках серого, где q - некоторый произвольный коэффициент. 3D: сюжет (x, y, этаж (q * f (x, y))

Эффективно эквивалентные высоты функции будут отображаться на одной поверхности уровня.

Если вы хотите получить кривые уровня, вы можете использовать 2D-метод и обнаружение границ / классификацию областей, чтобы получить точки (x, y) на одном уровне.

...