Реализация идущего алгоритма куба?

Кажется, что ваша переменная $ c содержит пустые новые строки. Для быстрого исправления вы можете добавить функцию обрезки следующим образом:

  $c = $c.Insert(1,",").trim()
6
задан Community 23 May 2017 в 12:07
поделиться

2 ответа

Прежде всего, изоповерхность может быть представлена ​​двумя способами. Один из способов состоит в том, чтобы иметь скалярные значения isoveue и per-point в качестве набора данных из внешнего источника. Так работает МРТ. Второй подход заключается в создании неявной функции F (), которая принимает точку / вершину в качестве параметра и возвращает новый скаляр. Рассмотрим эту функцию:

float computeScalar(const Vector3<float>& v)
{
    return std::sqrt(v.x*v.x + v.y*v.y + v.z*v.z);
}

, которая вычисляет расстояние от точки до начала координат для каждой точки в вашем скалярном поле. Если значение является радиусом, Это потому, что | V | <= R верно для всех точек внутри сферы или тех, которые живут внутри нее. Просто выясните, какие вершины находятся внутри сферы, а какие - снаружи. Вы хотите использовать операторы меньше или больше, чем объем, потому что объем делит пространство на две части. Когда вы знаете, какие точки в вашем кубе классифицируются как внутри и снаружи, вы также знаете, по каким краям пересекается изоповерхность. В итоге вы можете получить все, от треугольников до пяти. Положение вершин сетки можно вычислить путем интерполяции по пересеченным ребрам, чтобы найти фактическую точку пересечения.


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

2
ответ дан 17 December 2019 в 07:09
поделиться

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

2) Вам необходимо проверить вершины куба. Существуют различные оптимизации для этого, но, в общем, начните с первого угла и просто проверьте значения всех 8 углов куба.

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

4) После того, как вы сделали треугольники из triTable, вы можете использовать OpenGL для их рендеринга.

Допустим, у меня есть данные облака точек яблока. как мне поступить?

Это не не собираюсь работать с марширующими кубиками. Для марширующих кубов требуются данные вокселей, поэтому вам нужно использовать некоторый алгоритм, чтобы поместить облако точек данных в кубический объем. Gaussian Splatting - вариант здесь.

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

Если вы хотите узнать больше, Я очень рекомендую прочитать некоторые книги по технике визуализации. Хороший пример от ребят из Kitware - Инструментарий визуализации .

Возможно, вы захотите взглянуть на VTK . Он имеет реализацию C ++ Marching Cubes и является полностью открытым исходным кодом.

Мне нужно использовать некоторый алгоритм, чтобы поместить облако точек данных в кубический объем. Gaussian Splatting - вариант здесь.

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

Если вы хотите узнать больше, Я очень рекомендую прочитать некоторые книги по технике визуализации. Хороший пример от ребят из Kitware - Инструментарий визуализации .

Возможно, вы захотите взглянуть на VTK . Он имеет реализацию C ++ Marching Cubes и является полностью открытым исходным кодом.

Мне нужно использовать некоторый алгоритм, чтобы поместить облако точек данных в кубический объем. Gaussian Splatting - вариант здесь.

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

Если вы хотите узнать больше, Я очень рекомендую прочитать некоторые книги по технике визуализации. Хороший пример от ребят из Kitware - Инструментарий визуализации .

Возможно, вы захотите взглянуть на VTK . Он имеет реализацию C ++ Marching Cubes и является полностью открытым исходным кодом.

Если вы хотите узнать больше, я настоятельно рекомендую прочитать некоторые книги по технике визуализации. Хороший пример от ребят из Kitware - Инструментарий визуализации .

Возможно, вы захотите взглянуть на VTK . Он имеет реализацию C ++ Marching Cubes и является полностью открытым исходным кодом.

Если вы хотите узнать больше, я настоятельно рекомендую прочитать некоторые книги по технике визуализации. Хороший пример от ребят из Kitware - Инструментарий визуализации .

Возможно, вы захотите взглянуть на VTK . Он имеет реализацию C ++ Marching Cubes и является полностью открытым исходным кодом.

1
ответ дан 17 December 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: