huhangfan2004 发表于 2008-5-21 08:31

如何有三维数据画曲面??

现在有一组数据 分别为x=;
y=
z=
现在要画一曲面图形 坐标分别为x y z
这里的数据个数 可以增加为了方便我只写了几个,但有一点是确定的 就是 X Y每个数据之间的间隔不是确定的 。 但xyz三个数据是相对应的 .即有一个XY就有一个Z与之对应,但这个关系未知,只是有这样一个对应关系,现在要通过这些离散的数据 得到一曲面图,
希望大家能帮我想一下怎么处理。
当用到GRIDDATA MESH 等这些命令的时候 渴望得到你的具体例子的解释。比如说 最好针对如题所示的数据。
谢谢大家了

sogooda 发表于 2008-5-21 08:50

以你这样的数据是画不出来曲面的,只能是一条曲线。
画曲面的数据应该是(x(i),y(j),z(i,j))而不是你提供的这种(x(i),y(i),z(i))

sigma665 发表于 2008-5-21 09:16

helpgriddata

wwbeyondww 发表于 2008-5-21 09:25

回复 楼主 的帖子

赞同主任的方法,
有一个XY就有一个Z与之对应,但这个关系未知,这样很难得到.
因为你做曲面图,首先生成的是平面上的点的x,y坐标,事实上这个坐标就是你所列的数组x,y中分别取一个得到的组合.所以平面坐标已经扩展到length(x)*length(y)个了,而你的z得到的只是里面一条曲线的值.
一般如果知道xy同z关系的话,问题就很好解决. 给出一般方法:
x=;
y=;
=meshgrid(x,y);
Z=f(X,Y);% Z同XY之间的关系和z同x,y之间的关系一样
mesh(X,Y,Z);

sigma665 发表于 2008-5-21 09:31

GRIDDATA Data gridding and surface fitting.
    ZI = GRIDDATA(X,Y,Z,XI,YI) fits a surface of the form Z = F(X,Y) to the
    data in the (usually) nonuniformly-spaced vectors (X,Y,Z). GRIDDATA
    interpolates this surface at the points specified by (XI,YI) to produce
    ZI.The surface always goes through the data points. XI and YI are
    usually a uniform grid (as produced by MESHGRID) and is where GRIDDATA
    gets its name.

    XI can be a row vector, in which case it specifies a matrix with
    constant columns. Similarly, YI can be a column vector and it specifies
    a matrix with constant rows.

    = GRIDDATA(X,Y,Z,XI,YI) also returns the XI and YI formed
    this way (the results of = MESHGRID(XI,YI)).

    [...] = GRIDDATA(X,Y,Z,XI,YI,METHOD) where METHOD is one of
      'linear'    - Triangle-based linear interpolation (default)
      'cubic'   - Triangle-based cubic interpolation
      'nearest'   - Nearest neighbor interpolation
      'v4'      - MATLAB 4 griddata method
    defines the type of surface fit to the data. The 'cubic' and 'v4'
    methods produce smooth surfaces while 'linear' and 'nearest' have
    discontinuities in the first and zero-th derivative respectively.All
    the methods except 'v4' are based on a Delaunay triangulation of the
    data.
    If METHOD is [], then the default 'linear' method will be used.

    [...] = GRIDDATA(X,Y,Z,XI,YI,METHOD,OPTIONS) specifies a cell array
    of strings OPTIONS to be used as options in Qhull via DELAUNAYN.
    If OPTIONS is [], the default DELAUNAYN options will be used.
    If OPTIONS is {''}, no options will be used, not even the default.

    Example:
       rand('seed',0)
       x = rand(100,1)*4-2; y = rand(100,1)*4-2; z = x.*exp(-x.^2-y.^2);
       ti = -2:.25:2;
       = meshgrid(ti,ti);
       zi = griddata(x,y,z,xi,yi);
       mesh(xi,yi,zi), hold on, plot3(x,y,z,'o'), hold off

sigma665 发表于 2008-5-21 09:40

>> x=;
>> y=;

>> z=;

>> xi=linspace(1,10);
>> yi=linspace(5,15);
>> =meshgrid(xi,yi);
>> Z=griddata(x,y,z,X,Y,'v4');
>> mesh(X,Y,Z)
>> hold on;
>> plot3(x,y,z,'o')


不过,你的点基本都在一条曲线上,所以画面,很不合适

guohf 发表于 2008-5-21 13:46

非常不错的论坛,学到很多东西。

xinxin7311 发表于 2008-7-6 18:34

我这里有个关于海螺的曲面的点的数值,但是按上面的方法做出来的结果不对,请问是否应该做一些其他的改动才行,今天才发现这个论坛,这里的互动回答特别让我感动,希望哪位能给指点一下,数据是用txt文件保存的,但是我发现我不能用附件上传功能,是哪里出问题了吗,如果需要数据,我可以用邮箱发,我的邮箱:xinxin7311@163.com,谢谢

sigma665 发表于 2008-7-6 19:24

回复 8楼 的帖子

只改坐标

xinxin7311 发表于 2008-7-7 07:23

坐标是改了,但做出来的结果和原始模型差太远,我无法把得到的图形粘贴上来,总之和原来模型的海螺根本不是一回事,数据太多无法发送,请问怎么样在回复时用附件上传啊?谢谢
>> load d:\seashell.txt;
>> x=seashell(:,1);
>> y=seashell(:,2);
>> z=seashell(:,3);
>> xi=linspace(1,10);
>> yi=linspace(5,15);
>> =meshgrid(xi,yi);
>> Z=griddata(x,y,z,X,Y,'v4');
Warning: Duplicate x-y data points detected: using average of the z values.
> In griddata at 105
>> mesh(X,Y,Z)

sigma665 发表于 2008-7-7 09:24

Z=griddata(x,y,z,X,Y,'v4');
help griddata 可以选择不同的方法,这里的'v4'可以换成其他的
如过还不行,可能你的数据分布太不均匀了
ps:附件上传点 “发表新回复”,下面有 “上传附件”的

xinxin7311 发表于 2008-7-7 15:00

谢谢小西的回复,问题仍没解决

我试了各种插值方式,但是在求Z时总是提示:Warning: Duplicate x-y data points detected: using average of the z values,在搜索里也没找到相应的解决办法,我两天把300多页的相关帖子都简单浏览了一遍,也不知道该怎么做,只好继续向你讨教。谢谢

xinxin7311 发表于 2008-7-7 15:10

这是模型本来的形状

sigma665 发表于 2008-7-7 18:12

回复 13楼 的帖子

可能是你数据排列顺序有问题

Duplicate x-y重复?

xinxin7311 发表于 2008-7-7 21:05

我查过了,x和y的数据是不重复的,所以对这个错误很不理解,而且换了另外一个文件的数据也不行,还是这个错误
页: [1] 2
查看完整版本: 如何有三维数据画曲面??