Как получить минимальное сечение трехмерного столбца - PullRequest
0 голосов
/ 30 мая 2018

Теперь в трехмерном массиве хранится трехмерный том, в трехмерном томе указывается точка.Как рассчитать минимальное сечение объема через точку?

1 Ответ

0 голосов
/ 31 мая 2018

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

Кроме того, будьте осторожны, говоря, что «время обработки не критично», поскольку все становится относительным, когда вы выполняете численное решение для такого большого набора данных.То есть небольшие изменения в вашем внутреннем цикле могут изменить время обработки с минут на часы на дни ...

Все, что я описываю ниже, это "вне сетки", что я имею в виду под этим: у вас есть структурированное облако точек, но пространственный вектор генерации и распространения находится в свободном пространстве.Так, например, чтобы проверить точку внутри или снаружи вдоль заданного вектора свободного пространства, вы будете искать ближайшую координату вокселя внутри структурированного облака.Как правило, самый простой способ сделать это - просто масштабировать объекты до «пола» до ближайшей единицы разрешения.Хотя это проще, если вы используете целочисленное разрешение и фактически можете использовать пол, вы также можете просто сделать это с делением, округлением и повторным умножением по основным осям.

Первым шагом будет настройка функции для генерациипроизвольное сечение.Для этого вы возьмете вектор (A), затем сгенерируйте перпендикулярный вектор (C) к этому вектору (A) (это можно сделать несколькими способами, но проще всего просто создать еще один непараллельный вектор (B) и скрестите это с оригиналом, чтобы создать перпендикулярный вектор (C). Для вектора (B) вы можете просто использовать (0,0,1) или (0,1,0) *, используя первый, если тестовый вектор не являетсяпараллельно (0,0,1), в этом случае вы используете последнее. Теперь, когда у вас есть вектор (A) и вектор (C) в его перпендикулярной плоскости, вам нужно проверить свои данные вдоль этого вектора (C)По сути, тестируйте исходную точку, а затем двигайтесь вдоль вектора (C) на наименьшую единицу разрешения и продолжайте тестирование, пока не дойдете до края набора данных или до края вашего объекта в зависимости от наличия вогнутой оболочки.или нет . Затем поверните вектор (C) относительно вектора (A) и выполните радиальную выборку всей плоскости. Этот размер шага вращения, вероятно, должен соотноситься с минимальной длиной длины данных выборки, наиболее удаленной от выборки.точка (вы, вероятно, можете просто установить какое-то сколь угодно малое радиальное расстояние выборки, но это центр цикла обработки, поэтому на этом шаге самое дорогое).Важно, чтобы после этого шага вы использовали какой-то метод для нормализации своей области, так как вы будете повторять подсчет большой площади.Есть несколько способов получить внутреннюю область произвольной замкнутой формы.Единственное, что приходит в голову, - это просто вычислить площадь треугольника от последней «точки» для каждого тестового вектора (т.е. края) до следующего и суммировать все эти треугольники, чтобы получить окончательную область.Если вы выполняете сложные (не вогнутые формы), вам нужно получить входящие и исходящие ребра и выполнять вычисления трапазоидальной области для второго и третьего ребер.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...