找回密码
 注册
Simdroid-非首页
查看: 231|回复: 19

请教:matlab画4维球坐标图

[复制链接]
发表于 2010-12-16 14:20:26 | 显示全部楼层 |阅读模式 来自 浙江杭州
本帖最后由 gongzigq 于 2010-12-16 14:41 编辑

现有函数F是关于三维球坐标theta,phi和r的函数,先需要画出f的图形,请教高手,该怎么画呢?

我看到在直角坐标系中,matlab四维表现图用slice(x,y,z,V)画出,V是关于x,y,z的函数。可是我上面用的F是球坐标theta,phi,r的函数,该怎么转换呢?

谢谢指教~
 楼主| 发表于 2010-12-16 14:59:18 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
我知道了,可以用这个直角坐标来表示球坐标,代入F里面即可。
r=sqrt(x*x+y*y+z*z);
psi=atan(y/x);
theta=atan(z/sqrt(x*x+y*y));
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-16 16:25:20 | 显示全部楼层 来自 浙江杭州
可是slice只是画出某些切片,求教高人,F(x,y,z)是关于x,y,z的函数,这样的4维图该怎么画呢?谢谢~
回复 不支持

使用道具 举报

发表于 2010-12-16 17:17:57 | 显示全部楼层 来自 北京海淀
四维图能在三维空间中完整表示吗?
我认为好像不行吧。如果可以的话,那不说明这个空间就是四维的了。
觉得应该只能定F为常数做切片。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-18 21:14:25 | 显示全部楼层 来自 浙江杭州
4# bainhome

谢谢bainhome的回复。

我想了想,要画的函数V是关于三个球坐标的电场,想问的是有没有类似contour(x,y,z,n)的函数,来画我需要的图呢。

因为contour(x,y,z,n)就是在二维平面画等高线z,有没有在三维空间里画类似于等高线的呢?
回复 不支持

使用道具 举报

发表于 2010-12-18 21:22:22 | 显示全部楼层 来自 北京海淀
contour3
这类绘图命令都是在最后跟“3”变成空间内的,像bar3、plot3、scatter3等。
问之前不妨去看看help下方的“see also”,有时往往有意外发现。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-19 11:41:55 | 显示全部楼层 来自 浙江杭州
6# bainhome

bainhome,我试了下contour3,它只是把contour的等高线用三维形式画出来。
同一个函数,用contour和contour3画出来的结果,见附件。

而我现在需要解决是,简单来说,就是在每一个三维空间点(x,y,z),用一个代表函数值的颜色来标注此点,比如值越大,此点颜色越红;值越小,此点颜色越蓝。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-12-19 12:24:44 | 显示全部楼层 来自 北京
你这不是翻来覆去的绕圈子吗?如果函数值是F(x,y,z),这不是又回到四维图切片了?
我试了下contour3,它只是把contour的等高线用三维形式画出来。

概念错误。
contour3是用颜色索引表示z为不同常数时,特定z(x,y)=constant时的切片,不过在三维空间中可以用视觉方式表示出来,slice和它一个道理,但不能在三维内全部表示而已。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-21 11:32:06 | 显示全部楼层 来自 浙江杭州
8# bainhome

谢谢bainhome的回复。再向你请教,如下。
       我现在有个多项式F(r,theta,psi)=K*M(r)*N(theta)*P(psi),即F是关于三个球坐标的函数。M、N、P分别是r,theta,psi的函数。

       如果我想画三维切片图,好像只有slice函数画直角坐标系切片。所以我需要将球坐标转化为直接坐标,然后将直角坐标代入上式,但是球坐标转化后的直角坐标不是单调变化的(slice要求x,y,z是单调变化的),而且转化后,x会有0值出现(在分母上没意义),所以用下面的式子(直角坐标代替球坐标)就会出现问题。
r=sqrt(x*x+y*y+z*z);
psi=atan(y/x);
theta=atan(z/sqrt(x*x+y*y));

不知道我讲的清楚不,向你请教,我该怎么画这个三维切片呢?
回复 不支持

使用道具 举报

发表于 2010-12-21 17:49:48 | 显示全部楼层 来自 北京
本帖最后由 bainhome 于 2010-12-21 17:54 编辑

肯定是要先用meshgrid或者ndgrid还是什么命令给网格化处理一下的,印象中版面中有现成例子,但我没做过类似的事情,但原理就是如此。我为图省事,刚才随便生成了一个乱序点序列,用sufer软件试了试,五分钟就能上手出3D contour,相对比较方便。
哦,忘记了,还要出切片,应该可以看成不同常数F层上的contour,给定F数值→算(x,y,z)→导入sufer→网格化→出contour或者3Dcontour。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-12-21 22:46:41 | 显示全部楼层 来自 北京
乱序数据用griddata的处理方法:
  1. clear;clc
  2. data=round(2+100*rand(100,3));
  3. meshGrid=meshgrid(2:4:102);
  4. [meshX,meshY]=meshgrid(meshGrid,meshGrid);
  5. meshZ=griddata(data(:,1),data(:,2),data(:,3),meshX,meshY);
  6. contour(meshX,meshY,meshZ)
  7. figure;surf(meshX,meshY,meshZ)
  8. shading interp
  9. colormap(jet(256))
  10. camlight right
  11. lighting phong
复制代码
数据的精细化可以用interp2插值,slice命令用的是interp3,可以看看help的例子。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-12-21 23:01:15 | 显示全部楼层 来自 上海
四维图能在三维空间中完整表示吗?
我认为好像不行吧。如果可以的话,那不说明这个空间就是四维的了。
觉得应该只能定F为常数做切片。
bainhome 发表于 2010-12-16 17:17


探讨一下:四维图,不一定是四维空间,因此可以在三维空间中展示。
在GIS领域,如果一份地图,只有横坐标、纵坐标和高度,我们常说这个地图不是真正的三维,而是2.5维。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-12-21 23:18:21 | 显示全部楼层 来自 北京
不大明了,四维图应如何做三维尺度内展示的,cwit老兄可以简单说说吗
感觉surf、mesh等命令,其实是把平面划分为n×n个网格区域,然后再高度z处循环将第(i,j)个区域用patch补色,而色值则采用了映射高度z的colorbar定义。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-22 09:03:42 | 显示全部楼层 来自 浙江杭州
12# cwit

嗯,matlab里面mesh、surf里面的z都是关于x,y的函数,也就是所谓的2.5维。

但是当x,y,z是独立的时候,要画F(x,y,z),我只看到slice切片可以画这种图,请cwit多讲讲该怎么画~
回复 不支持

使用道具 举报

发表于 2010-12-22 16:14:39 | 显示全部楼层 来自 上海
绘制有很多种方式,比如patch,image,surface,line等等,都可以达到类似的效果。
举个最简单的例子,就用点吧,描述五维信息(五种属性)。在三维坐标中,每个离散点(或者矩阵中的点),可以第四个属性设置其不同的颜色,根据第五个属性设置不同的大小。这个x,y,z不一定是空间位置,也可以是三种属性换算成的序号以确定其位置。
回复 不支持

使用道具 举报

发表于 2010-12-22 16:22:05 | 显示全部楼层 来自 北京
我个人理解是:单纯从视角上说,其实这样的第四维或者第五维信息,和空间第三维的z信息是重合的。
回复 不支持

使用道具 举报

发表于 2010-12-22 16:34:27 | 显示全部楼层 来自 上海
应该是略有不同吧。点的形状,大小,颜色如果差异较大,还是比较明显的。如果是自定义的点,还可以设定方向。

看了你另外一个帖子:MATLAB数据在surfer中生成contour和surface图解教程
其实与这个帖子有类似意义,我们经常用image处理索引图,采用不同分段的颜色设置转换RGB彩色图。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-12-22 17:22:48 | 显示全部楼层 来自 北京
不知道我这样理解对不对:
patch这样的函数方法其实针对的操作是一个小面,颜色等内容应该算是三维这个大格局里的小手段。我想cwit所指的这种广义的四维或者五维的图形,应当类似于下图这种:



注:图来自MATLAB  help中的Displaying Divergence with Stream Tubes。

流管在创建的时候,每个空间点处包含矢量方向、颜色索引等诸多信息,每层信息相当于一个“维”。
举这个例子是意思是说,发问的楼主恐怕还得老老实实回到三维点信息处,去画他的普通3D图,否则就要把所有具体信息解构,然后用patch等low level方法组合,这样我想难度大很多。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-22 21:48:01 | 显示全部楼层 来自 浙江杭州
本帖最后由 gongzigq 于 2010-12-22 21:55 编辑

[url=]18#[/url] bainhome

诚挚的感谢两位大侠的回复。^ ^
bainhome大侠所说的回到3D画图是指用slice吧?
我在用slice画切片。可以画出来,正在优化中。


下面的是初步结果,还需优化。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-12-23 18:08:31 | 显示全部楼层 来自 上海
bainhome的理解很专业。
支持一个!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-5 05:24 , Processed in 0.071519 second(s), 22 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表