Как ограничить вороные вычисления в Matlab?

У меня есть стопка изображений эллиптического цилиндра. Внутри цилиндра есть несколько важных «точек»/семян. Я рассчитал евклидово расстояние между ними и ближайшим соседом. Мой следующий шаг — построить диаграмму Вороного и рассчитать объем каждой ячейки Вороного.

Мне нужно определить пространство/пределы этого эллиптического цилиндра, чтобы принять во внимание при расчете диаграммы Вороного.

Любые идеи?

Заранее спасибо,

Йотам


person Yotam Levy    schedule 12.05.2015    source источник
comment
что ты имеешь в виду под розыгрышем? Вы хотите графически построить трехмерный объем? но как бы вы провели некоторые вычисления на этой фигуре?   -  person m.s.    schedule 12.05.2015
comment
Извиняюсь за неточность. По сути, у меня есть стопка изображений эллиптического цилиндра. Внутри цилиндра есть несколько важных точек/семян. Я рассчитал евклидово расстояние между ними и ближайшим соседом. Мой следующий шаг — построить диаграмму Вороного и рассчитать объем каждой ячейки Вороного. И теперь, наконец, к моей проблеме, мне нужно определить пространство/пределы этого эллиптического цилиндра, чтобы принять во внимание при расчете диаграммы Вороного, и я не уверен, как это сделать... Я должен был заявить об этом раньше. Мои извинения.   -  person Yotam Levy    schedule 12.05.2015
comment
вы можете опубликовать код, который у вас уже есть   -  person m.s.    schedule 12.05.2015


Ответы (2)


Сначала давайте начнем с угадывания контекста:

Matlab mupad предназначен для символьных вычислений. Я не понимаю, почему вы думаете, что вам понадобится это, чтобы рисовать что-нибудь?

Я понятия не имею, зачем вам нужно что-то рисовать, но я предполагаю, что это для визуализации выполненного расчета. Например, площадь поперечного сечения, используя конкретное уравнение плоскости, или окружность поперечного сечения, учитывая уравнение плоскости. Или, возможно, точки столкновения луча, или выделить поверхность, на которой вы рассчитываете?

В этих случаях числового рендеринга достаточно, и вы можете просто использовать встроенные функции построения графика...

Я рекомендую поверхность (строит сетку) http://nl.mathworks.com/help/matlab/ref/surface.html

но на самом деле предыдущий вопрос здесь показывает, как вручную построить трехмерный цилиндр: Цилиндр с заполненным верхом и низом в матлабе

обратите внимание, что уравнения для цилиндра выражены непосредственно в функции, что позволяет вам модифицировать ее!


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

person Henrik    schedule 12.05.2015

Насколько сложно это будет, зависит от того, сможете ли вы работать с фрагментами по отдельности или вам нужно воздействовать на том в целом.

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

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

Если вы собираетесь работать с объемом, вы должны делать то же самое, но в другом порядке (это зависит от того, для чего вы его используете): как только вы вычислите пересечение между данным изображением и цилиндром, вы можно сначала применить маску или границу к каждому срезу, а затем нарисовать диаграмму Вороного.

Главное — избегать необходимости представлять цилиндр в виде 3D-объекта: это возможно даже без символической математики, но это сложно, и, поскольку ваш набор данных естественным образом упорядочен в виде срезов, было бы наиболее последовательно также разрезать ваш цилиндр, эллипсы намного более компактно, чем цилиндр.

И для всех этих вариантов первым шагом является математическое определение проблемы. В зависимости от того, насколько вам удобно работать с Matlab, вы можете преобразовать его в псевдокод, а затем, наконец, в Matlab или пропустить псевдокод.

person xenoclast    schedule 12.05.2015
comment
Спасибо за ответ! Поскольку я новичок в Matlab, мне было проще получить координаты центроидов (в xyz) точек вручную (используя Metamorph). Затем я вычислил евклидово расстояние между ними и ближайшим соседом в Matlab. Мой следующий шаг - сделать диаграмму Вороного и рассчитать объем каждой ячейки Вороного, и именно здесь я в основном застрял (я должен был быть более ясным. Мои извинения). Мне удалось создать диаграмму Вороного (хотя я уверен, что она несложная), но я не знаю, как определить ее пределы в пространстве. - person Yotam Levy; 14.05.2015
comment
Я просто не совсем уверен, какие координаты мне нужны для этого (длина осей, я думаю?). - person Yotam Levy; 14.05.2015
comment
Есть функция voronoin, которая вычисляет n-D диаграмму Вороного, и вы можете использовать convhulln для получения объемов ячеек, но хитрость заключается в том, чтобы сначала преобразовать ваши данные в правильный формат. См. uk.mathworks.com/help/matlab/ref/voronoin.html и посмотрите, сможете ли вы адаптировать примеры к своим потребностям. Попробуйте без ограничений и посмотрите, каковы результаты. Возможно, вы обнаружите, что можете применить границу к диаграмме Вороного и/или к соответствующим ячейкам после того, как они у вас есть. - person xenoclast; 14.05.2015
comment
Отлично, я поработаю над этим. Надеюсь, у меня получится сделать это правильно. Большое спасибо за твою помощь! - person Yotam Levy; 15.05.2015