⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bspline_1.m

📁 对电容层析成象的ECT断层图象 进行3维显示
💻 M
字号:
function [U,V,R,Info]=BSpline_1(bw,t);

BW=bw;
Info=zeros(10,2);%记录曲线顶点数Info(u,2)为顶点数 ,Info(u,1)为是否有轮廓线的FLAG,1为有,0为没有。。。
U=zeros(10,30);
V=zeros(10,30);
R=zeros(10,30);
Y=zeros(10,10);
X=zeros(10,10);
Z=zeros(10,10);
F=zeros(10,10);
Q=zeros(10,10);
xt=zeros(1,2);
zt=zeros(1,2);
yt=zeros(1,2);
a=0;
b=0;
for i=1:10
    for j=1:10
            Z(i,j)=0.9-0.2*(i-1);
            X(i,j)=-0.9+0.2*(j-1);
            Y(i,j)=t*0.5;
       end 
   end      
%写坐标矩阵
k=0;
for i=1:10
    for j=1:10         
         if(BW(i,j)==1&F(i,j)==0) 
              xb=X(i,j);
              zb=Z(i,j);
              yb=Y(i,j);              
              Q(i,j)=1;
              g=0;
              quan=0;
              m=i;
              n=j;
              k=k+1;
              h=0;
              %找到起点    设起点标志位
              Info(k,1)=1;%set the true
              while quan==0                     
             while g==0&quan==0
             %右扫描
               xt(1)=X(i,j);
               zt(1)=Z(i,j);
               yt(1)=Y(i,j);            
               if (i~=1&i~=10&j~=10)
                   %一般情况
                  if(BW(i-1,j)==1& F(i-1,j)==0)
                    a=i-1;
                    b=j;
                  elseif(BW(i-1,j+1)==1& F(i-1,j+1)==0)
                    a=i-1;
                    b=j+1;
                  elseif(BW(i,j+1)==1& F(i,j+1)==0)
                     a=i;
                     b=j+1;
                  elseif(BW(i+1,j+1)==1&F(i+1,j+1)==0)
                     a=i+1;
                     b=j+1; 
                  elseif(BW(i+1,j)==1&F(i+1,j)==0)
                     a=i+1;
                     b=j;
                   else g=1;    
                   end          
                    %一般情况                      
               elseif i==1&j~=10
                   %特殊情况之一右扫下三点
                  if(BW(i,j+1)==1& F(i,j+1)==0)
                     a=i;
                     b=j+1;
                  elseif(BW(i+1,j+1)==1&F(i+1,j+1)==0)
                     a=i+1;
                     b=j+1; 
                  elseif(BW(i+1,j)==1&F(i+1,j)==0)
                     a=i+1;
                     b=j;
                  else   g=1;    
                   end   
                 %右扫下三点结束                 
               elseif i==10&j~=10
                   %特殊情况之二右扫上三点
                     if(BW(i-1,j)==1& F(i-1,j)==0)
                     a=i-1;
                     b=j;
                     elseif(BW(i-1,j+1)==1& F(i-1,j+1)==0)
                      a=i-1;
                     b=j+1;
                     elseif(BW(i,j+1)==1& F(i,j+1)==0)
                      a=i;
                      b=j+1;
                     else g=1;    
                     end 
                     %右扫上三点结束                      
                 elseif j==10&i~=1&i~=10
                   %特殊情况之三
                   if(BW(i-1,j)==1& F(i-1,j)==0)
                     a=i-1;
                     b=j;
                    elseif(BW(i+1,j)==1& F(i+1,j)==0)
                     a=i+1;
                     b=j;
                    else g=1;
                    %结束
                   end
               elseif j==10&i==1
                   
                   if(BW(i+1,j)==1& F(i+1,j)==0)
                     a=i+1;
                     b=j;
                    else g=1;
                    end
                elseif j==10&i==10                    
                    if(BW(i-1,j)==1& F(i-1,j)==0)
                     a=i-1;
                     b=j;
                    else g=1;
                    end
                end
               if(g~=1)
                 %连线
                xt(2)=X(a,b);
                zt(2)=Z(a,b);
                yt(2)=Y(a,b);                
                hold on
                %plot3(xt,yt,zt,'k');
                hold on                
                i=a;
                j=b;
                F(i,j)=1;
                h=h+1;               
                U(k,h)=X(i,j);
                 V(k,h)=Z(i,j);
                 R(k,h)=Y(i,j);         
             end
                %连线结束
                if Q(i,j)==1
                    quan=1;
                    Q(i,j)=0;
                end                 
            end%  右扫描结束           
          %判别扫描是否结束     
               if ((i~=1&i~=10&j~=1)&((BW(i+1,j-1)==1&F(i+1,j-1)==0)|(BW(i,j-1)==1&F(i,j-1)==0)|(BW(i-1,j-1)==1&F(i-1,j-1)==0)))|((i==1&j~=1)&((BW(i+1,j-1)==1&F(i+1,j-1)==0)|(BW(i,j-1)==1&F(i,j-1)==0)))|((i==10&j~=1)&((BW(i,j-1)==1&F(i,j-1)==0)|(BW(i-1,j-1)==1&F(i-1,j-1)==0))) 
                                 %左扫描  
                  while(g==1&quan==0)
                        xt(1)=X(i,j);
                        zt(1)=Z(i,j);                        
                        if (i~=1&i~=10&j~=1)
                         %一般情况
                                if(BW(i+1,j)==1&F(i+1,j)==0) 
                                   a=i+1;
                                   b=j;
                                elseif(BW(i+1,j-1)==1&F(i+1,j-1)==0)
                                   a=i+1;
                                   b=j-1;
                                elseif(BW(i,j-1)==1&F(i,j-1)==0)
                                   a=i;
                                    b=j-1;
                                elseif(BW(i-1,j-1)==1&F(i-1,j-1)==0)
                                    a=i-1;
                                    b=j-1;
                                elseif(BW(i-1,j)==1&F(i-1,j)==0)
                                    a=i-1;
                                    b=j;
                                else g=0;
                                end 
                                %一般情况 
                        elseif i==1&j~=1
                        %特殊情况之一左扫下三点
                                 if(BW(i+1,j)==1&F(i+1,j)==0) 
                                   a=i+1;
                                   b=j;
                                 elseif(BW(i+1,j-1)==1&F(i+1,j-1)==0)
                                   a=i+1;
                                   b=j-1;
                                 elseif(BW(i,j-1)==1&F(i,j-1)==0)
                                    a=i;
                                    b=j-1;
                                  else g=0;
                                  end    
                        elseif i==10&j~=1
                       %特殊情况之二左扫上三点 
                                 if(BW(i,j-1)==1&F(i,j-1)==0)
                                   a=i;
                                    b=j-1;
                                 elseif(BW(i-1,j-1)==1&F(i-1,j-1)==0)
                                    a=i-1;
                                    b=j-1;
                                 elseif(BW(i-1,j)==1&F(i-1,j)==0)
                                    a=i-1;
                                    b=j;
                                 else g=0;
                                  end 
                        elseif j==1&i~=1&i~=10
                       %特殊情况之三
                             if(BW(i-1,j)==1& F(i-1,j)==0)
                               a=i-1;
                               b=j;
                             elseif(BW(i+1,j)==1& F(i+1,j)==0)
                               b=j;
                             else g=0;
                              end
                        elseif j==1&i==1
                            if(BW(i+1,j)==1& F(i+1,j)==0)
                              b=j;
                            else g=1;
                            end
                       elseif j==1&i==10
                    
                          if(BW(i-1,j)==1& F(i-1,j)==0)
                               a=i-1;
                                  b=j;
                          else g=0;
                          end 
                        %结束
                    end                                            
                       %  左扫                           
               if(g~=0)
                 %连线
                xt(2)=X(a,b);
                zt(2)=Z(a,b);
                yt(2)=Y(a,b);
                hold on
                %plot3(xt,yt,zt,'k');
                hold on
                i=a;
                j=b;
                F(i,j)=1;
                  h=h+1;
                U(k,h)=X(i,j);
                V(k,h)=Z(i,j);
                R(k,h)=Y(i,j);
                  if Q(i,j)==1
                    quan=1;
                    Q(i,j)=0;
                end
                end
                %连线结束
            end
             %判别扫描是否结束
           if ~(((i~=1&i~=10&j~=10)&((BW(i+1,j+1)==1&F(i+1,j+1)==0)|(BW(i,j+1)==1&F(i,j+1)==0)|(BW(i-1,j+1)==1&F(i-1,j+1)==0)))|((i==1&j~=10)&((BW(i+1,j+1)==1&F(i+1,j+1)==0)|(BW(i,j+1)==1&F(i,j+1)==0)))|((i==10&j~=10)&((BW(i,j+1)==1&F(i,j+1)==0)|(BW(i-1,j+1)==1&F(i-1,j+1)==0))) )
               quan=1;
           end   
       else quan=1;    
       end        
end %(quan==0)段程序结束  
Info(k,2)=h;
    end                 
end  
end

Info
U
V
R

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -