как проследить изоповерхность на более высокое пространстве эффективноизоповерхности отслеживание в высоких измерениях
ответ
вас есть функция затрат скаляра в Н размеров,
е ( у- , y , .., y N) ε ℝ, у ε ℝ
, но выборка только в регулярной прямоугольной сетке,
у к = Ψ к + ψ к x k, константы Ψ к ε ℝ и ψ к ε ℝ и сетки координат х K е ℕ
и проблема, чтобы найти изоповерхность (ы) I,
е ( г. , у , .., у N) = С я
Прямой подход был бы просто цикл по каждой ячейке в сетку и проверить, пересекает ли текущая изоповерхность текущая ячейка, и если да, описать часть изоповерхности в текущей ячейке. (Маршевые кубы - это один из подходов к описанию того, как изоповерхность пересекает каждую ячейку сетки.)
Ограничение здесь заключается в том, чтобы использовать поиск по соседству вместо проверки каждой ячейки.
OP был previous question специально для 3D-случая, к которому я posted ссылку на пример кода, grid.h и grid.c (в Pastebin.com, потому что они были слишком длинными, чтобы включать в себя встроенный).
Эта реализация полностью отличается от метода разрезания ОП. Мой - это прямое, простое прохождение по ячейкам сетки, пересекающим текущую изоповерхность.Он кэширует образцы сетки и использует отдельную карту (один из на ячейку ячейки), чтобы отслеживать, какие ячейки сетки были кэшированы, прошли и/или нажали в стек, чтобы пройти позже. Этот подход легко распространяется на более чем три измерения. Хотя код написан точно для трех измерений, сам подход не является специфическим для трех измерений; все, что вам нужно сделать, это настроить структуры данных для размещения любого (разумного) количества измерений.
Самоизогнутая прогулка является тривиальной. Вы начинаете с любой ячейки сетки, пересекая изоповерхность, затем исследуйте все ячейки ближайшего соседа, чтобы увидеть, пересекает ли их изоповерхность. На практике вы используете стек ячеек ячейки сетки для проверки и карту фреймов ячейки сетки, чтобы избежать повторного изучения уже рассмотренных ячеек сетки.
Поскольку число выборок точек сетки на ячейку сетки равно 2 N, мой примерный код не является оптимальным: множество соседних точек сетки в конечном итоге оценивается, чтобы увидеть, пересекаются ли соседние ячейки сетки изоповерхности. (Вместо того, чтобы рассматривать только точки сетки, ограничивающие изоповерхность, рассматриваются узлы сетки, принадлежащие клеткам сетки, окружающим изоповерхность.) Эта дополнительная работа растет экспоненциально, так как N увеличивается.
Лучше было бы рассмотреть каждый из 2 N возможно ( N -1) -граней отдельно, чтобы избежать изучения клеток изоповерхности не пересекаются вообще.
В N-мерном регулярной прямоугольной сетки, каждая ячейка представляет собой N-мерный параллелепипед, определяется по точкам сетки 2 N в вершинах (углах). В Н -cuboid клетки имеют N ( N -1) двухмерные грани и 2 N ( N -1) -мерных граней.
Для изучения каждого ( N -1) -Лицо, вам необходимо изучить функцию стоимости на 2 N -1 точек сетки, определяющих, что ( N -1) -Лицо. Если функция стоимости в этих точках охватывает изоповерхностное значение, то изоповерхность пересекает поверхность ( N -1), а изоповерхность также пересекает следующую ячейку сетки в этом направлении.
Есть две ( N -1) -граундов, перпендикулярных каждой оси. Если изоповерхность пересекает ( N -1) -покрытие ближе к отрицательной бесконечности, то изоповерхность также пересекает следующую ячейку сетки вдоль этой оси в сторону отрицательной бесконечности. Аналогично, если изоповерхность пересекает ( N -1) -поверхность ближе к положительной бесконечности, то она также пересекает следующую ячейку сетки вдоль этой оси в сторону положительной бесконечности. Таким образом, ( N -1) -верхны идеально подходят для определения того, какие соседние ячейки следует исследовать или нет. Это верно, потому что ( N -1) -поля - это точно набор точек сетки, которыми разделяют две ячейки.
Я очень сомневаюсь предоставить пример кода C, потому что примерный код того же подхода для 3D-приложения, похоже, пока не помог никому.Я боюсь, что более длинное объяснение с использованием двух- и трехмерных иллюстраций для иллюстрации потребуется для описания подхода в легко понятных терминах; и без твердого понимания логики, любой примерный код выглядел бы как gobbledygook.
Лучше использовать библиотеку для 2 измерений, вы можете попробовать алгоритм conrec от профессора Пола Бурка. Это похоже на маршевый куб.
- 1. Отслеживание столбцов в вычисленных измерениях
- 2. Как реализовать `opIndex` в более высоких измерениях?
- 3. Нужна помощь понимание `команду cat` MATLAB в высоких измерениях
- 4. Почему индексирование numpy работает по-разному в более высоких измерениях?
- 5. Extract контур из MATLAB изоповерхности
- 6. Данные о графике на изоповерхности в MatLab
- 7. граф в нескольких измерениях
- 8. векторизации в нескольких измерениях
- 9. Определить копланарные (или коллинеарные) точки в более высоких измерениях с помощью Java
- 10. Монте-Карло: важная выборка на единичном диске и в более высоких измерениях
- 11. Визуализация изоповерхности, сгенерированной с помощью маршевых кубов
- 12. Mongodb агрегация в двух измерениях
- 13. Ненужный рулон в нескольких измерениях
- 14. результаты автокреатации в разных измерениях
- 15. NumPy: создать массив bool, например, «repeat», но в нескольких измерениях
- 16. Градиентный спуск в двух измерениях в Python
- 17. Интернационализация в высоких диаграммах?
- 18. Применить преобразование к граням/вершинам из изоповерхности и черчение результата
- 19. Как подразделить треугольник в трех измерениях?
- 20. определение расстояния между точками в n-измерениях
- 21. Рассчитать функцию LookAt как в двух измерениях
- 22. Минимальный радиус покрытия в n измерениях
- 23. Excel - найти значение в двух измерениях
- 24. создать иерархию в дочерних измерениях не родителя
- 25. пересечение сегментов в 3-х измерениях
- 26. Участок SVM в 3-х измерениях
- 27. Что вызывает ошибку в измерениях jmh?
- 28. Nump: использование np.mean в 3-х измерениях
- 29. генерировать случайный путь в 3-х измерениях
- 30. Стохастические дифференциальные уравнения (SDE) в двух измерениях
Как вы ожидаете, что решение будет представлено? Я предполагаю, что ваш текущий подход дает вам 3 кривые, а не поверхность, но я могу ошибаться. –
@YvesDaoust Это дает поверхности не 3 только 3 кривых. Я хочу набор изотопов. – CRM
Если вы не предоставляете больше информации, я не могу вам помочь. –