基于少量三维散乱数据点的空间闭合曲面重构通用 Matlab 源程序%C 为初始点集,CCC 为插值点集,N 为网格细化数(插值点个数为 N^2)function CCC=aiwa(C,N)[n,m]=size(C);if mod(n,2)==1 C=C(1:(n-1),:); [n,m]=size(C);endCx=C(:,1);Cy=C(:,2);Cz=C(:,3);%选取一个内点作为新直角坐标系的原点,并计算初始点的新直角坐标midx=(min(Cx)+max(Cx))/2;midy=(min(Cy)+max(Cy))/2;midz=(min(Cz)+max(Cz))/2;midx=mean(Cx);midy=mean(Cy);midz=mean(Cz);Cx=Cx—midx
*ones(n,1);%别忘反变换
Cy=Cy—midy
*ones(n,1);Cz=Cz—midz
*ones(n,1);CC=[Cx,Cy,Cz];%直角坐标转换为球坐标%从左至右:逆时针角,Z 轴张角,距离Cq=CC;for i=1:n [Cq(i,1),Cq(i,2),Cq(i,3)]=cart2sph(CC(i,1),CC(i,2),CC(i,3)); Cq(i,2)=pi/2—Cq(i,2);%别忘反变换
Cq(i,1)=Cq(i,1)+pi;end%球面扩展CC1=Cq;CC1(:,2)=(2*pi)
*ones(n,1)-CC1(:,2);CC1(:,1)=CC1(:,1)-(3*pi)
*ones(n,1);C1=zeros(0,3);for i=1:n if CC1(i,1)>=—2*pi C1=[C1;CC1(i,:)]; endendC2=Cq;C2(:,2)=(2*pi)
*ones(n,1)-C2(:,2);C2(:,1)=C2(:,1)-pi
*ones(n,1);