【问题标题】:Matlab 3D plot on Cylindrical Axes圆柱轴上的 Matlab 3D 图
【发布时间】:2012-06-25 12:58:01
【问题描述】:

我已经运行了模拟,这些模拟给了我对应于X 不同半径数量的数据点,以及Y 每个角度被评估的角度数量。这意味着我需要绘制 XY 数据点。

我目前正在以非理想方式绘制它:我使用 xy 轴作为 rtheta 轴。这意味着我的数据显示为正弦趋势,在笛卡尔网格上随半径增加,而不是它物理代表的圆。这就是我目前绘制数据的方式:

surf(r_val, th_val, v_val);

我想要做的是将我的数据绘制在圆柱轴上,例如函数polar(),但在 R3 空间中。我宁愿不下载工具箱,也不想修改现有的极地功能;如果没有其他解决方案,那么我显然最终还是会这样做。

感谢您的帮助! G.

另外,我正在使用 Matlab 2012a

编辑:

r_val = 1x8 包含唯一半径的向量

th_val = 1x16 包含独特角度的向量

v_val = 8x16 矩阵,包含每个位置对应的电压

注意:(回答后)

这个问题不存在真正理想的解决方案,因为 Matlab 目前不支持真正的极轴方法。 Resource found here.

【问题讨论】:

    标签: matlab 3d cylindrical


    【解决方案1】:

    您应该在绘制坐标之前将坐标转换为笛卡尔坐标。 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) 函数为x 输入一个长度为 n 的向量,为y 输入一个长度为 m 的向量,然后z 是一个 nXm 矩阵。通过将我的 r 和 theta 更改为笛卡尔坐标,矩阵值不再匹配(因为我使用了 r 和 theta 的唯一值)
    • 在您的情况下,x,y,z 的大小是多少?
    • 我不确定您所说的矩阵值不再匹配是什么意思。也许您可以使用更多详细信息更新您的问题。但是,surf 也接受 xy 的矩阵。在这种情况下,xyz 的大小必须相同。尝试类似[R, T] = meshgrid(r_val, th_val),然后是[x, y] = pol2cart(T, R);
    • 查看编辑以获取有关向量的更多信息。我的意思是[x,y]=pol2cart(th_val, r) 不会计算(因为我使用了唯一值并且它们的大小不同),或者如果我没有使用唯一值,那么使用surf(x,y,v_val) 时矩阵尺寸将不再匹配。感谢您的帮助。
    • 另外,我刚刚实施的这种方法并没有给出理想的解决方案——在圆柱轴上绘制值,在那里我可以清楚而轻松地观察半径和角度。再次感谢您的持续帮助!
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多