24小时热门版块排行榜    

CyRhmU.jpeg
查看: 631  |  回复: 17
当前主题已经存档。
【有奖交流】积极回复本帖子,参与交流,就有机会分得作者 wuqingming2003 的 50 个金币

wuqingming2003

木虫 (小有名气)

[交流] 【求助】如何做一个由三个点确定的切面的等高线?

本人是matlab新手,现得到一组数据(在附件中),是一个40*40*40的空间内的各个点的强度值,现在想做由(26,26,26)、(20,20,20)和(38,10,22)三个点确定的平面的等高线分布图,请问如何做?
请将程序写的详细一点,万分感谢!

[ Last edited by wuqingming2003 on 2009-10-14 at 09:41 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hitzhang

木虫 (正式写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
wuqingming2003(金币+20,VIP+0):非常感谢,辛苦了!明天试试看,如果可以成功,50个金币全部赠送。 10-14 22:05
nono2009(金币+2,VIP+0):谢谢专家!麻烦再看一下此问题的进展。 10-15 13:37
引用回帖:
Originally posted by wuqingming2003 at 2009-10-14 09:25:
本人是matlab新手,现得到一组数据(在附件中),是一个40*40*40的空间内的各个点的强度值,现在想做由(26,26,26)、(20,20,20)和(38,10,22)三个点确定的平面的等高线分布图,请问如何做?
请将程序写的详细一点, ...

40*40*40的数组比较大,估计你的附件白贴了。

下面是一个例子,可供参考。


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

生成一个数据
>> [x y z]=meshgrid(1:40);
>> C=sin((x.^2+y.^2+z)/20);

定义制定的斜面


1,三个点的坐标;
>> a=[20 20 20];
>> b=[26 26 26];
>> c=[38 10 22];

2,计算x-z平面与预制平面的夹角

>> der1=[0 1 0]; %x-z平面法相方向
>> der2=cross(b-a,c-a);%预制平面法向方向
>> der3=cross(der1,der2);%两平面交线方向
>> the=dot(der2,der1)/sqrt(sumsqr(der1)*sumsqr(der2));%两平面夹角


3,画出这两个平面,看看是不是落在那三个点上?

>> [xx zz]=meshgrid(-10:50);yy=ones(size(xx));
>> mesh(xx,yy,zz),hold on;hsp = mesh(xx,yy,zz);
>> rotate(hsp,der3,the*180/pi,[1 1 1])%旋转平面,如附件一
>> scatter3(20,20,20)
>> scatter3(26,26,26)
>> scatter3(38,10,22)


4,得到旋转后平面的数据
>> xd = get(hsp,'XData');
>> yd = get(hsp,'YData');
>> zd = get(hsp,'ZData');


5,画一下且过那三个点的等值线,如附件2

>> contourslice(x,y,z,C,xd,yd,zd)
>> hold on;
>> contourslice(x,y,z,C,[],1,[])
>> scatter3(20,20,20)
scatter3(26,26,26)
scatter3(38,10,22)

/////////////////////////////////////////////////////////////////////////////
2楼2009-10-14 19:16:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuqingming2003

木虫 (小有名气)

非常感谢你的回答,写的很详细,我明天试试看,再次感谢!
引用回帖:
Originally posted by hitzhang at 2009-10-14 19:16:



40*40*40的数组比较大,估计你的附件白贴了。

下面是一个例子,可供参考。


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

生成一个数据
>> [x y z]=meshgrid(1:40);
>> C=sin(( ...

3楼2009-10-14 22:14:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuqingming2003

木虫 (小有名气)

nono2009(金币+0,VIP+0):建议PM或引用回复该帖,以便别人及时知道你的message! 10-15 13:36
我用你说的方法试了一下,出现了点问题,我把程序写在下面,麻烦帮我看看哪里出错了,谢谢!
[path,fn]=uigetfile('*.txt','Open');
fp=fopen([fn,path],'r');
head=fscanf(fp,'%s',4);
data=fscanf(fp,'%f',[4,40*40*40]);
fclose(fp);
x=reshape(data(1,,[40,40,40]);
y=reshape(data(2,,[40,40,40]);
z=reshape(data(3,,[40,40,40]);
C=reshape(data(4,,[40,40,40]);
>> a=[20 20 20];
>> b=[26 26 26];
>> c=[38 10 22];
>> der1=[0 1 0]; %x-z平面法相方向
>> der2=cross(b-a,c-a);%预制平面法向方向
>> der3=cross(der1,der2);%两平面交线方向
>> the=dot(der2,der1)/sqrt(sumsqr(der1)*sumsqr(der2));%两平面夹角
>> [xx zz]=meshgrid(-10:50);yy=ones(size(xx));
>> mesh(xx,yy,zz),hold on;hsp = mesh(xx,yy,zz);
>> rotate(hsp,der3,the*180/pi,[1 1 1])%旋转平面
>> scatter3(20,20,20)
>> scatter3(26,26,26)
>> scatter3(38,10,22)
这样得到的结果中旋转后的平面并没有经过这三个点,如附件中的图所示
引用回帖:
Originally posted by hitzhang at 2009-10-14 19:16:



40*40*40的数组比较大,估计你的附件白贴了。

下面是一个例子,可供参考。


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

生成一个数据
>> [x y z]=meshgrid(1:40);
>> C=sin(( ...

4楼2009-10-15 12:12:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hitzhang

木虫 (正式写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
kuhailangyu(金币+1,VIP+0):谢谢参与 10-15 16:01
wuqingming2003(金币+10,VIP+0):改成这个代码后,画的平面就经过三个点了 10-15 16:20
引用回帖:
Originally posted by wuqingming2003 at 2009-10-15 12:12:
我用你说的方法试了一下,出现了点问题,我把程序写在下面,麻烦帮我看看哪里出错了,谢谢!
[path,fn]=uigetfile('*.txt','Open');
fp=fopen([fn,path],'r');
head=fscanf(fp,'%s',4);
data=fscanf(fp,'%f', ...

呵呵,不好意思,代码贴错了。角度忘记求反余弦了,这样改

>> the=acos(dot(der2,der1)/sqrt(sumsqr(der1)*sumsqr(der2)));%两平面夹角
5楼2009-10-15 15:42:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuqingming2003

木虫 (小有名气)

nono2009(金币+0,VIP+0):再提醒一次:建议PM或引用回复该帖,以便别人及时知道你的message! 10-15 16:26
非常感谢!按照你的方法,点共面的问题已经解决了,可我将后续的程序输入后并没有得到等高线的图,得到的图是下面的样子

请问是怎么回事?不好意识,我是新手,又要麻烦你了!

我想得到类似第二张图那样的结果,请问该怎么弄?无需是彩色,只要二维面及其等高线即可,万分感谢!
引用回帖:
Originally posted by hitzhang at 2009-10-15 15:42:



呵呵,不好意思,代码贴错了。角度忘记求反余弦了,这样改

>> the=acos(dot(der2,der1)/sqrt(sumsqr(der1)*sumsqr(der2)));%两平面夹角

[ Last edited by wuqingming2003 on 2009-10-15 at 16:45 ]
6楼2009-10-15 16:22:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hitzhang

木虫 (正式写手)

引用回帖:
Originally posted by wuqingming2003 at 2009-10-15 16:22:
非常感谢!按照你的方法,点共面的问题已经解决了,可我将后续的程序输入后并没有得到等高线的图,得到的图是下面的样子

请问是怎么回事?不好意识,我是新手,又要麻烦你了!

我想得到类似第二张图那样的结 ...

没明白啥意思,旋转一下看看。
7楼2009-10-15 18:38:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuqingming2003

木虫 (小有名气)

我把输出的结果旋转了一下,麻烦你看看,谢谢!
引用回帖:
Originally posted by hitzhang at 2009-10-15 18:38:

没明白啥意思,旋转一下看看。

8楼2009-10-15 23:16:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hitzhang

木虫 (正式写手)

引用回帖:
Originally posted by wuqingming2003 at 2009-10-15 23:16:
我把输出的结果旋转了一下,麻烦你看看,谢谢!

看啥?
9楼2009-10-15 23:26:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuqingming2003

木虫 (小有名气)

结果不是切面的等高线呀,请问是我哪里出错了,谢谢!
引用回帖:
Originally posted by hitzhang at 2009-10-15 23:26:

看啥?

10楼2009-10-16 09:37:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wuqingming2003 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见