回 帖 发 新 帖 刷新版面

主题:MATLAB绘制3D图像的问题

大家好。我刚用MATLAB. 需要高手的帮忙.

我做数据挖掘, 要弄数据成像. 现在我有一个文件. 里面有比如10个点
X    Y    Z

0.0    0.0    0.24325877219371428
-119.0    0.0214    -0.38536714085245105
-9.0    0.0642    -0.6639905962684893
-68.0    0.0856    -0.2110314044309649
-118.0    0.107    -0.12362223791790816
-89.0    0.107    -0.7208892321557419
-53.0    0.1498    -0.011445394635502648
-115.0    0.214    -0.03919114965828285
-74.0    0.2354    0.05074486039127324

我怎么才能用这写数据画出一个3D图像呢?

plot3(x,y,z) 可以画出,但只是点连接着点. 非常不直观. 怎么样画的想mesh等有曲线的图像呢?

谢谢大家了

回复列表 (共7个回复)

沙发

x=[0., -119.,   -9.,  -68., -118.,  -89.,  -53., -115.,  -74.]';
y=[0., .214e-1, .642e-1, .856e-1,  .107,   .107,   .1498,   .214,   .2354]';
z=[.24325877,  -.38536714,  -.66399060, -.21103140, -.12362224, -.72088923, -.11445395e-1, -.39191150e-1,  .50744860e-1]';
b=[.8273074261e-1, -.4016956049e-2,-9.771252360, -.5635098472e-4,28.39818405, -.4229019088e-1]
plot3(x,y,z,'o','markerfacecolor','b');
stem3(x,y,z,'filled')
axis tight
str=num2str([1:9]');
text(x,y,z+.001,str,'fontsize',14)
pause(5)
hold on
[x1,y1]=meshgrid(-120:1:5,0:.002:.24);
z1=b(1)+b(2)*x1+b(3)*y1+b(4)*x1.^2+b(5)*y1.^2+b(6)*x1.*y1;
surf(x1,y1,z1)
axis tight
alpha(.7)
shading interp

板凳

谢谢楼上的高手啊~~

能再请教个问题吗? 可惜通过楼上的方法画出的图像非常不直观,因为我有有上万个点,不知道能不能画出像MESH(PEAKS(25)),或者SURF这样的图像. 我以前是通过这些上万个点我用JARFREECHART可以绘制2D图像. 不同的颜色表示Z的值. 如果想画MESH这样的图需要有函数,或者要把数据转化成MATRIX. 不过怎么转化我都忘记了. 数学丢了很久了[em8]

还有那个 b是用来干什么的呢?

非常感谢你的帮助

3 楼

不好意思啊,有个地方我不太明白

[x1,y1]=meshgrid(-120:1:5,0:.002:.24);
z1=b(1)+b(2)*x1+b(3)*y1+b(4)*x1.^2+b(5)*y1.^2+b(6)*x1.*y1;
surf(x1,y1,z1)
axis tight
alpha(.7)
shading interp


通过你的方法画的3D图像好像跟我的点都没有关系. 只是通过这些代码画出来的? 不知道我说的对不对?

刚开始用MATLAB.请多多指教

4 楼

对这9个点而言,存在穿过这些点的一个曲面,这个z1便是曲面的函数形式。对于上万个点,这个曲面需重新拟合。对于不太复杂的曲面形式,这种拟合应当不难,但对很复杂的曲面形式,这种拟合的难度很大。

5 楼

那就是说基本上生成这个3D图像是没有希望了?

还有就是你能否解释一下那个b是什么呢?那里面的值代表了什么? 

非常感谢.

6 楼

得到3D图像非常简单,难的是与数据符合程度较高或很高的曲面,在数据很多、曲面很复杂的情况下这样的曲面很难得到。
b即为曲面函数(上述是最简单的二元二次多项式)的参数。

7 楼


请教楼主一个问题:
[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);
v = x.*exp(-x.^2-y.^2-z.^2);
xslice = [-1.2,.8,2]; yslice = 2; zslice = [-2,0];
slice(x,y,z,v,xslice,yslice,zslice)
colormap hsv

for i = -2:.5:2
hsp = surf(linspace(-2,2,20),linspace(-2,2,20),zeros(20)+i);
rotate(hsp,[1,-1,1],30)
xd = get(hsp,'XData');
yd = get(hsp,'YData');
zd = get(hsp,'ZData');
delete(hsp)
slice(x,y,z,v,[-2,2],2,-2) % Draw some volume boundaries
hold on
slice(x,y,z,v,xd,yd,zd)
hold off
axis tight 
view(-5,10) 
drawnow
end
将图形分割后,我现在想将分割面的四周的黑边框去掉,同时x,y,z轴的范围固定在【-1 1 -1.5 2 -1 1】(如果用axis([-1 1 -1.5 2 -1 1])的话,在进行旋转的过程中,但是([-1 1 -1.5 2 -1 1])范围外的仍然可以显示),我想要的是在这个范围外的,无论怎么旋转,都不让显示 
 
       

我来回复

您尚未登录,请登录后再回复。点此登录或注册