Matlab在柱坐标系上的3D绘图

3
我运行了模拟,得到与X个不同半径和Y个对应角度的数据点。这意味着我有X乘以Y个数据点需要绘制。目前我正在以非理想的方式绘制数据:我将xy轴用作rtheta轴。这意味着我的数据在笛卡尔坐标系中以正弦波形式随半径增加,而不是在圆形图像上呈现。以下是我目前绘制数据的方式:
surf(r_val, th_val, v_val);

我希望做的是将我的数据绘制在一个圆柱坐标轴上,类似于polar()函数,但是在R3空间中。我不想下载工具箱或修改现有的极坐标函数;如果没有其他解决方案,那么我显然最终还是会这样做。
谢谢你的帮助! G.
另外,我正在使用Matlab 2012a
编辑:
r_val = 包含唯一半径的1x8向量
th_val = 包含唯一角度的1x16向量
v_val = 包含与每个位置对应的电压的8x16矩阵
注意:(回答后)
这个问题目前没有真正理想的解决方案,因为Matlab目前不支持真正的极坐标轴方法。 此处找到资源
1个回答

5
在绘制坐标图之前,您应该将坐标转换为笛卡尔坐标。MATLAB有内置的函数可以执行坐标变换。例如,请参见pol2cart,它将极坐标或柱坐标转换为笛卡尔坐标。在您的情况下,您只需使用类似于以下内容的代码:
[x, y] = pol2cart(th_val, r_val);

surf(x, y, v_val);

编辑:考虑到th_valr_val是长度不同的向量,因此在调用pol2cart之前,需要首先创建一个点网格,例如:

[R, T] = meshgrid(r_val, th_val);
[x, y] = pol2cart(T, R);
surf(x, y, v_val);

这不是一个坏主意,而且这是我首先想到的。问题在于:surf(x,y,z)函数输入长度为n的向量x和长度为m的向量y,然后z是一个nXm的矩阵。通过将我的r和theta转换为笛卡尔坐标,矩阵的值不再匹配(因为我使用了唯一的r和theta值)。 - gkiar
在你的情况下,x、y、z的尺寸是多少? - tmpearce
2
我不确定你所说的“矩阵值不再匹配”的意思。也许您可以在问题中更新更多细节。但是,surf也接受xy的矩阵。在这种情况下,xyz必须都是相同的大小。尝试类似于[R,T] = meshgrid(r_val,th_val),然后[x,y] = pol2cart(T,R); - Chris
你是否需要类似于这个解决方案 - Chris
"MATLAB不支持真正的极坐标轴。" 这回答了我的问题,这是我能得到的最好的答案。谢谢!请问您能否更新您的答案并包含meshgrid的注释?然后我会接受它!再次感谢您的帮助!" - gkiar
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接