[已答复] 已知离散点坐标,拟合成封闭曲面

[复制链接]
jixieyouhuashej 发表于 2014-4-29 23:17:42
请教大家:
已知若干个离散点的三维坐标,如何拟合成一个封闭的曲面。

程序:
%--------------------------------------------------------------------------
A=xlsread('PointData.xls');
% 下部分网格曲面
x=A(1:85,1);   % 根据dz的大小,相应调整行的范围--及确定好哪些点属于下部分
y=A(1:85,2);
z=A(1:85,3);
minx = min(x);
maxx = max(x);
miny = min(y);
maxy = max(y);
xtemp=linspace(min(x),max(x),50);%这个是选择的数值样本大小,越大曲线越平滑%
ytemp=linspace(min(y),max(y),50);
[X,Y]=meshgrid(xtemp,ytemp);
Z=griddata(x,y,z,X,Y,'cubic');
figure('numbertitle','off','name','网格图')
surf(X,Y,Z)
shading faceted

%--------------------------------------------------------------------------
% 上部分网格曲面
hold on
x=A(61:404,1);
y=A(61:404,2);
z=A(61:404,3);
minx = min(x);
maxx = max(x);
miny = min(y);
maxy = max(y);
xtemp=linspace(min(x),max(x),50);%这个是选择的数值样本大小,越大曲线越平滑%
ytemp=linspace(min(y),max(y),50);
[X,Y]=meshgrid(xtemp,ytemp);
Z=griddata(x,y,z,X,Y,'cubic');
surf(X,Y,Z)
shading faceted

figure('name','散点图')
plot3(A(:,1),A(:,2),A(:,3),'*')


我自己用上述方法分别拟合上下两部分,但是图中有缺口,如何才能得到封闭的图形呢?
谢谢~!

散点图

散点图

网格图

网格图

PointData.xls

40.5 KB, 下载次数: 32

点的坐标

11 条回复


jixieyouhuashej 发表于 2014-4-30 12:49:37
求前辈们帮忙啊,我是新手

liutao01 发表于 2020-12-29 11:04:25
老哥,这个问题你解决了吗?六年了:'(,历史是惊人的相似,我也碰到这个问题了

顾世梁 发表于 2020-12-29 11:15:18
liutao01 发表于 2020-12-29 11:04
老哥,这个问题你解决了吗?六年了,历史是惊人的相似,我也碰到这个问题了 ...

给出数据,我可以试试。

liutao01 发表于 2020-12-29 14:39:19
附件是离散点,图片是我用plot3画出来的图,从这图中大致可以看出图像的形状特点,你试试看能不能拟合成一个封闭曲面?谢谢!
]4JCVOZ]52)TWHV`$`D$@~O.png

matlab02.mat

41.23 KB, 下载次数: 2


顾世梁 发表于 2020-12-29 17:05:13
liutao01 发表于 2020-12-29 14:39
附件是离散点,图片是我用plot3画出来的图,从这图中大致可以看出图像的形状特点,你试试看能不能拟合成一 ...

所有x,y,z数据组成一个平面,没有形成任何球体、椭球体的可能。不可能实现封闭球面的拟合。

liutao01 发表于 2020-12-29 17:21:05
顾世梁 发表于 2020-12-29 17:05
所有x,y,z数据组成一个平面,没有形成任何球体、椭球体的可能。不可能实现封闭球面的拟合。 ...

但是z没有和x,y在一个平面呀,上面的那个图形用plot3画的不就是一个三维的封闭点的图嘛,这样也不行吗?方便加一个微信或者QQ吗?

顾世梁 发表于 2020-12-29 17:54:55
本帖最后由 顾世梁 于 2020-12-30 07:26 编辑

我说的平面亦指斜面。正如一个二维直线,非要拟合成圆或椭圆,没有这种可能性。z=x; 或,数据发错了?


liutao01 发表于 2020-12-30 10:33:33
顾世梁 发表于 2020-12-29 17:54
我说的平面亦指斜面。正如一个二维直线,非要拟合成圆或椭圆,没有这种可能性。z=x; 或,数据发错了?

...

难道数据不对吗,我发的这个数据,导入到MATLAB中,是有三个参数x,y,z,分别有3199个数据。我用plot3(x,y,z)绘制图像,如下所示:
我这个图里也不是一个平面,图像显示为一个由点包围的空间闭合曲面。
]4JCVOZ]52)TWHV`$`D$@~O.png

顾世梁 发表于 2020-12-30 16:34:07
还是我读错数据了。正在找一个适当的函数拟合,但这类非正常椭球体函数不好找,要花时间试拟合。

liutao01 发表于 2020-12-30 21:24:29
顾世梁 发表于 2020-12-30 16:34
还是我读错数据了。正在找一个适当的函数拟合,但这类非正常椭球体函数不好找,要花时间试拟合。 ...

哦哦哦,谢谢了,你能简单的说一下思路吗?
我现在是用griddata()划分网格,但是这种方法它把原来的数据中x,y值相同,z值不同的点,全变成一个点了,z值用这些点的z值的平均值,用中方法拟合的曲面变成一个非封闭的曲面了。
我用curvefitting效果和上面这种方法一样。

顾世梁 发表于 2021-1-6 11:11:39
liutao01 发表于 2020-12-29 14:39
附件是离散点,图片是我用plot3画出来的图,从这图中大致可以看出图像的形状特点,你试试看能不能拟合成一 ...

元旦假期,中断了几天。试了较多函数,没有很适合的,只能用最简单的椭球形式拟合,效果不佳。
SSy =   3.2113e+07
fx1=b(1)+b(2)*x+b(3)*y+(b(4)+b(5)*x+b(6)*y+b(7)*x.^2+b(8)*y.^2).^.75;
fx2=b(1)+b(2)*x+b(3)*y-(b(4)+b(5)*x+b(6)*y+b(7)*x.^2+b(8)*y.^2).^.75;
b =[992.0831407  0.3200664853  0.007190247024  672.9028788  0.05285759847  -0.02862879639  -228.0801436  -228.6894333]
RSS = 3440242.81945
MSe =     1078.4
R^2 =    0.89287
nh1662.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

热门教程
站长推荐
快速回复 返回顶部 返回列表