[已答复] txt点坐标文件导入画曲面,曲面超出边界点,怎么回事?

[复制链接]
小鬼奋斗 发表于 2012-4-10 17:32:29
各位大虾:
我导入TXT点坐标文件 points.txt (11.22 KB, 下载次数: 3171)

6 条回复


小鬼奋斗 发表于 2012-4-14 10:21:54
这问题我还没解决掉。。。

meatball1982 发表于 2012-4-14 11:08:56
本帖最后由 meatball1982 于 2012-4-14 11:10 编辑

因为你生成 的曲面的X,Y坐标就已经超过点的范围了啊。
[X,Y]=meshgrid(min(x):1:max(x),min(y):1:max(y));

从图中可以看出,有一部分是是散点的范围之外,
clc; clear;
load points.txt; %points.txt文件放在matlab安装的work夹里%
x=points(:,1);
y=points(:,2);
z=points(:,3);
[X,Y]=meshgrid(min(x):1:max(x),min(y):1:max(y));
Z=griddata(x,y,z,X,Y,'v4');
surf(X,Y,Z,'facecolor','interp','edgecolor','none','facelighting','phong');
hold on;
mesh(X,Y,zeros(size(X)))%可以看出你用于拟合的曲面的范围。
plot3(x,y,z,'*');

注意红色框的部分,就是你生成的,超出散点的范围

注意红色框的部分,就是你生成的,超出散点的范围

小鬼奋斗 发表于 2012-4-16 12:14:25
meatball1982 发表于 2012-4-14 11:08
因为你生成 的曲面的X,Y坐标就已经超过点的范围了啊。
[X,Y]=meshgrid(min(x):1:max(x),min(y):1:max(y)); ...

辛苦!谢谢!对于你指出的问题我还是不太懂,还是不知道该怎么办,有什么办法解决这问题吗?我就最外边界点控制曲面轮廓。

meatball1982 发表于 2012-4-16 13:47:41
本帖最后由 meatball1982 于 2012-4-16 13:57 编辑
小鬼奋斗 发表于 2012-4-16 12:14
辛苦!谢谢!对于你指出的问题我还是不太懂,还是不知道该怎么办,有什么办法解决这问题吗?我就最外边界 ...

可能是我没有说清楚。抛开你的数据,用下面的程序说明一下。

在[-0.5 0.5]*[-0.5,0.5]的范围内,有一些散点。我要用它们开griddata 一个网格中的曲面。
我希望生成的点,都在[-0.5 0.5]*[-0.5,0.5]的范围内。

如果我用一个更大的网络生成,比如[-0.7 0.7]*[-0.7,0.7],那么生成的曲面的边界就在[-0.7,0.7]*[-0.7,0.7]这个范围内了。而你觉得如果超出[-0.5 0.5]*[-0.5,0.5]的范围就不对了。

n=100;

x_n=rand(n,1)-0.5;
y_n=rand(n,1)-0.5;
z_n=x_n.^2+y_n.^2+rand(n,1)*0.02;

x_line=[-0.7:0.1:0.7];
y_line=[-0.7:0.1:0.7];
[X,Y]=meshgrid(x_line,y_line);
Z=griddata(x_n,y_n,z_n,X,Y,'v4');

ind=(X<0.5)&(X>-0.5)&(Y<0.5)&(Y>-0.5)
Z_new=Z;
Z_new(~ind)=NaN;

figure(1)
mesh(X,Y,Z)
hold on
hidden off
plot3(x_n,y_n,z_n,'.');
grid on
hold off

figure(2)
mesh(X,Y,Z_new)
hold on
hidden off
plot3(x_n,y_n,z_n,'.');
grid on
hold off




我的思路是找出在之前数据范围内的点(我暂时是用z的最小值进行判断的,实际上你应该是判断图中红色的范围这些点不在你之前数据的范围之内),把剩下的点都变成NaN(Not a number),这样画出来的图就对了。



clc; clear;
load points.txt; %points.txt文件放在matlab安装的work夹里%

x=points(:,1);
y=points(:,2);
z=points(:,3);
[X,Y]=meshgrid(min(x):1:max(x),min(y):1:max(y));
Z=griddata(x,y,z,X,Y,'v4');

ind=(Z>min(z));
Z(~ind)=NaN;
surf(X,Y,Z,'facecolor','interp','edgecolor','none','facelighting','phong');
hold on;
% mesh(X,Y,zeros(size(X)))
% plot(x,y,'*')
plot3(x,y,z,'*');
hidden off



不知道这次说清楚了没,你要自己判断生成数据哪些在你要的范围之内,判断的依据由你自己来定义。把剩下的数据画出来就好了。

point_range2.jpg
point_range.jpg
point_range_inrange.jpg

红色部分应该被设为Nan

红色部分应该被设为Nan

小鬼奋斗 发表于 2012-4-18 12:53:38
meatball1982 发表于 2012-4-16 13:47
可能是我没有说清楚。抛开你的数据,用下面的程序说明一下。

在[-0.5 0.5]*[-0.5,0.5]的范围内,有一些 ...

明白了,谢谢,不过我的点有很多,都不好删哪些点,其实我是有曲线函数关系式的,但用函数除了x,y变量还涉及一个中间变量t因而也不好画曲面,我这是通过excel把点算出来,希望用点画面,还是很难啊。。

meatball1982 发表于 2012-4-18 13:26:14
小鬼奋斗 发表于 2012-4-18 12:53
明白了,谢谢,不过我的点有很多,都不好删哪些点,其实我是有曲线函数关系式的,但用函数除了x,y变量还 ...

如果不知道应该删除哪些,就把所有的都画出来 ,然后,只显示你想要的部分就行。好像是用axis这个命令。
如果有时间t的话,因定一个,把x,y,z的关系画出来就行。如果把t加在里面,可以有四维的图,matlab里面有相应的命令。希望对你有用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表