【发布时间】:2014-08-08 11:55:17
【问题描述】:
我正在为绘制表面极坐标图背后的概念而苦苦挣扎。
我正在尝试绘制传感器在一个半球上以不同角度组合测量的值。
我有一个包含以下信息的数组:
A(:,1) = 0 到 360º 的方位角值
A(:,2) = 0 到 90º 的天顶值
A(:,3) = 以 A(:,1) 和 A(:,2) 的角度组合测量的值
例如,这里是一个sn-p:
0 15 0.489502132167206
0 30 0.452957556748497
0 45 0.468147850273115
0 60 0.471115818950192
0 65 0.352532182508945
30 15 0.424997863795610
30 30 0.477814980942155
30 45 0.383999653859467
30 60 0.509625464595446
30 75 0.440940431784788
60 15 0.445028058361392
60 30 0.522388502880219
60 45 0.428092266657885
60 60 0.429315072676194
60 75 0.358172892912138
90 15 0.493704001125912
90 30 0.508762762699997
90 45 0.450598496609200
90 58 0.468523071441297
120 15 0.501619699042408
120 30 0.561755273071577
120 45 0.489660355057938
120 60 0.475478615354648
120 75 0.482572226928475
150 15 0.423716506205776
150 30 0.426735372570756
150 45 0.448548968227972
150 60 0.478055144126694
150 75 0.437389584937356
为了澄清,这里有一段代码显示了极坐标图上的测量点。
th = A(:,1)*pi/180
polar(th,A(:,2))
view([180 90])
这给了我以下情节:
我现在想绘制相同的东西,但不是使用点,而是使用存储在 A(:,3) 中的这些点的值。然后,我想对数据进行插值以获得彩色表面。
经过一些研究,我发现我需要在网格上插入我的值,然后转换为笛卡尔坐标。从那里我不知道如何进行。有人能指出我正确的方向吗?
我很难理解插值的概念,但这是我尝试过的:
x1 = linspace(0,2*pi,100)
x2 = linspace(0,90,100)
[XX,YY] = meshgrid(x1,x2)
[x,y] = pol2cart(th,A(:,2))
gr=griddata(x,y,A(:,3),XX,YY,'linear')
【问题讨论】:
-
首先,这是一个制表符分隔的文本,其中包含变量 A 的 3 列,如我的问题所示:speedyshare.com/BnrZ5/test.txt
-
遗憾的是,您的链接提供了一个无法在我的 linux 上执行的执行文件 :(
-
如果我错了,请纠正我:您将传感器等距放置在方位角方向上,因此 A(:,1) 给出 0、30、60、90,...。每 30 度保证放一列传感器,没有任何其他角度。在每一列中,您有大约 5 个传感器,它们的间距不相等,但间距“很好”。因此,您需要对“列”数据进行插值,因为原始点不会形成网格;但是您不必朝方位方向移动,因为这些点完全对齐。我是否抓住了正确的想法?
-
抱歉文件,它应该是一个文本文件。我的示例点具有误导性:我试图获得均匀分布的测量值,但设置并不总是允许这样做。该脚本应该能够处理任何角度,方位角从 0 到 360º,天顶角从 0ª(天底)到 90º。因此,必须在方位角和天顶上进行插值。
-
我现在能给你的只是一个简短的回答。您需要在球坐标中进行 2d 插值。它与笛卡尔坐标系没有太大不同。 mathworks.com/matlabcentral/newsreader/view_thread/58326 这是一个很好的起点。 mathworks.com/matlabcentral/answers/… 这也可能有助于详细关注。
标签: matlab plot polar-coordinates surface