3D-график Matlab на цилиндрических осях

Я провел симуляции, которые дали мне точки данных, соответствующие X количеству различных радиусов и Y количеству углов, при которых оценивалась каждая из них. Это означает, что у меня есть X умножить на Y точки данных, которые мне нужно построить.

В настоящее время я рисую его неидеальным образом: я использую оси x и y в качестве осей r и theta. Это означает, что мои данные отображаются в виде синусоидального тренда, который увеличивается с радиусом на декартовой сетке, а не в виде круга, который он физически представляет. Вот как я сейчас рисую свои данные:

surf(r_val, th_val, v_val);

Что я хочу сделать, так это отобразить мои данные на цилиндрической оси, такой как функция polar(), но в пространстве R3. Я бы предпочел не загружать набор инструментов или изменять существующую полярную функцию; если нет другого решения, то я, очевидно, все равно сделаю это.

Спасибо за вашу помощь! Г.

Кроме того, я использую Matlab 2012a

ИЗМЕНИТЬ:

r_val = вектор 1x8, содержащий уникальные радиусы

th_val = вектор 1x16, содержащий уникальные углы

v_val = матрица 8x16, содержащая напряжения, соответствующие каждой позиции

ПРИМЕЧАНИЕ: (после ответа)

По-настоящему идеального решения этой проблемы не существует, поскольку Matlab в настоящее время не поддерживает методы с истинными полярными осями. Ресурс найден здесь.


person gkiar    schedule 25.06.2012    source источник


Ответы (1)


Вы должны преобразовать свои координаты в декартовы координаты перед их построением. MATLAB имеет встроенные функции для выполнения преобразований координат. См., например, pol2cart, который преобразует полярные или цилиндрические координаты в Декартовы координаты. В вашем случае вы просто использовали бы что-то вроде:

[x, y] = pol2cart(th_val, r_val);

surf(x, y, v_val);

Редактировать: Учитывая, что th_val и r_val являются векторами разной длины, необходимо сначала создать сетку точек перед вызовом pol2cart по следующим строкам:

[R, T] = meshgrid(r_val, th_val);
[x, y] = pol2cart(T, R);
surf(x, y, v_val);
person Chris    schedule 25.06.2012
comment
Это неплохая идея, и это первое, к чему я пришел. Препятствие заключается в следующем: функция surf(x,y,z) вводит вектор длины n для x и вектор длины m для y, тогда z является матрицей nXm. Изменив мои r и тета на декартовы, значения матрицы больше не совпадают (поскольку я использовал уникальные значения r и тета) - person gkiar; 25.06.2012
comment
каковы размеры x, y, z в вашем случае? - person tmpearce; 25.06.2012
comment
Я не уверен, что вы имеете в виду под значения матрицы больше не совпадают. Возможно, вы можете обновить свой вопрос с более подробной информацией. Однако surf также принимает матрицы для x и y. В этом случае x, y и z должны быть одного размера. Попробуйте что-то вроде [R, T] = meshgrid(r_val, th_val), затем [x, y] = pol2cart(T, R);. - person Chris; 25.06.2012
comment
См. правки для получения дополнительной информации о векторах. Я имел в виду, что либо [x,y]=pol2cart(th_val, r) не будет вычисляться (потому что я использовал уникальные значения, а они разного размера), либо если я не использовал уникальные значения, то размеры матрицы больше не будут совпадать при использовании surf(x,y,v_val). Спасибо за вашу помощь. - person gkiar; 25.06.2012
comment
Кроме того, этот подход, который я только что реализовал, не дает идеального решения — нанесения значений на цилиндрическую ось, где я могу четко и легко наблюдать радиус и угол. Еще раз спасибо за вашу постоянную помощь! - person gkiar; 25.06.2012
comment
Тогда, боюсь, я не совсем понимаю, чего вы ожидаете. Если вы нанесете свои цилиндрические координаты на декартовы оси, вы, конечно, получите артефакты из-за несоответствия между системами координат. Если это проблема, преобразуйте свою сетку в декартову и постройте ее. Поскольку ваша сетка цилиндрическая, конечно, этот график будет выглядеть как цилиндр. Боюсь, вам придется более четко указать, чего вы пытаетесь достичь. Возможно, несколько примеров скриншотов или примеров данных, которые демонстрируют, почему вас не устраивает это решение? - person Chris; 25.06.2012
comment
Это хорошее решение, и я очень доволен, просто пытаюсь продвинуть его немного дальше. Видение цилиндра — это то, чего я желаю, но я хочу, чтобы декартовы оси, на которых он лежит, были цилиндрическими осями. Это просто по той причине, что я могу легко наблюдать радиус от начала координат и угол, а не просто наблюдать за координатами (x, y). Это проясняет ситуацию? Дело не в том, как его построить, а в том, как повернуть оси на цилиндрическую ось, очень похожую на функцию графика polar(). - person gkiar; 25.06.2012
comment
Что-то вроде это решение что вам нужно? - person Chris; 25.06.2012
comment
Настоящие полярные оси не поддерживаются в MATLAB. Это ответило на мой вопрос, что это лучшее, что я получу. Спасибо! Не могли бы вы обновить свой ответ, чтобы включить комментарий с сеткой? Тогда я приму это! Еще раз спасибо за вашу помощь! - person gkiar; 25.06.2012