24小时热门版块排行榜    

查看: 2036  |  回复: 4

free0121

木虫 (著名写手)

[求助] 如何在MATLAB中插值求取中间截面(外轮廓线)

大家好,想向各位大侠请教一下:
如果知道一个物体的几个关键控制截面(外轮廓),如何通过插值得到中间的更多截面呢?每一个控制截面都是一个2维矩阵,表示截面上各点的X,Y坐标,每相邻两个控制截面之间是平稳光滑过渡的,即截面i逐渐沿Z轴变化到截面i+1,而且整个物体的外表面也是光滑的。如何通过这些已知的截面得到中间更多截面呢?
在MATLAB中需要用到哪些命令来处理呢?

谢谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

free0121

木虫 (著名写手)

自己先支持一下,希望会的童鞋帮帮忙哦,先谢谢啦~~
2楼2012-08-09 21:36:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

【答案】应助回帖


感谢参与,应助指数 +1
xiegangmai: 金币+1, 谢谢参与! 2012-08-10 22:39:21
楼主可以试试help griddatan
3楼2012-08-10 16:30:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

free0121

木虫 (著名写手)

引用回帖:
3楼: Originally posted by change0618 at 2012-08-10 16:30:54
楼主可以试试help griddatan

谢谢你的建议,不过我好像用不了这类函数,比如像yi = griddatan(X,y,xi)这种形式的函数,我的已知项是各个截面的点,以及截面的Z值(所切的位置),根据这些信息,要寻找到不同的Z所对应的截面(X,Y).所以用这些函数时实际上我是希望给定一个z值,找到对应的点集合(二维截面)。

这种情况该如何处理呢?
4楼2012-08-11 23:44:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
xiegangmai: 金币+3, 谢谢应助! 2012-08-16 22:53:26
free0121: 金币+10, ★★★★★最佳答案, 谢谢csgt0的热心帮助,很强大!在此之前自己用了另外的比较简单的命令来执行这样的插值求中间截面,但是写出的程序要麻烦一点,有时间再试下csgt0的这个办法。非常感谢!!! 2012-08-16 23:02:30
做了个例子,不知道行不行
思路是先将不同大小的截面(截面数组大小不同)插值成相同大小的数组,分别控制其xyz
然后对不同数组的的相同点所对应的xyz进行插值。
CODE:
clc
clear
[x1,y1]=meshgrid(-1:1);   %构建3*3截面的xy
[x2,y2]=meshgrid(-2:2);   %构建5*5截面的xy
[x3,y3]=meshgrid(-3:3);    %构建第3个截面的xy,7*7大小。
x11=x3/3;             %根据最大的截面来对最小的截面插值(-1:1之间),使得其也为7*7
y11=y3/3;
x22=x3*2/3;          %同上,同理在-2:2之间插值7个
y22=y3*2/3;
z1=[0,.5,1;0,.5,1;0,.5,1];             %3个截面的z值
z2=2*ones(5,5);
z3=4*ones(7,7);
z11=griddata(x1,y1,z1,x11,y11);          %前2个截面插值完之后的
z值
z22=griddata(x2,y2,z2,x22,y22);
surf(x1,y1,z1)                       %画出插值前截面
hold on
surf(x2,y2,z2)
hold on
surf(x3,y3,z3)
%通过上面构造,将3*3和5*5的截面插值成了7*7的数组。

for i=1:7
    for j=1:7
        x(i,j,:)=interp1(1:3,[x11(i,j),x22(i,j),x3(i,j)],1:.5:3);    %对每个数组对应位置垂直插值,将3个面插值成5个面。
        y(i,j,:)=interp1(1:3,[y11(i,j),y22(i,j),y3(i,j)],1:.5:3);
        z(i,j,:)=interp1(1:3,[z11(i,j),z22(i,j),z3(i,j)],1:.5:3);
    end
end
figure  %插值后画图
for m=1:5
    surf(x(:,:,m),y(:,:,m),z(:,:,m))
    hold on
end


插值前3个截面,每个截面的有效点数不同,分别为3*3,5*5,7*7



插值后5个截面,所有截面的有效点数相同,均为7*7

showmethemoney
5楼2012-08-16 11:41:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 free0121 的主题更新
信息提示
请填处理意见