Вопрос

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

    1. Возьмите любую функцию f(x,y,z)=k (где k постоян), и границы для x, y и z. Также возьмите два параметра сетки Stepx и Stepz.
    2. Чтобы уменьшить проблему кривой уровня, итерация от Zmin до Zmax с интервалами Stepz. Так f(x,y,z)=k => f(x,y,fixedZ)=k
    3. Сделайте ту же процедуру с Stepx, уменьшив проблему до f(fixedX, y, fixedZ)=k
    4. Решите f(fixedX, y, fixedZ) - k = 0 Для всех значений Y, которые удовлетворят это уравнение (используя какой -то алгоритм поиска корней).
    5. Для всех сгенерированных точек постройте те, которые в качестве кривой уровня (внутренний цикл генерирует кривые уровня при заданном Z, затем для разных значений Z есть только стеки кривых уровней)
    6 (необязательно). Создайте сетку из этих кривых/точек уровня, которые принадлежат набору уровня.

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

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

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

Это было полезно?

Решение

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

Другие советы

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

http://stemkoski.github.com/three.js/marching-cubes.html

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top