gusucode.com > 《模式识别与智能计算》matlab源代码 > 《模式识别与智能计算》matlab源代码/《模式识别与智能计算》部分函数的源程序/书程序/第12章/star.m

    function star(x,k)
[n,m]=size(x);
a1=min(x);r=max(x)-min(x);p=1/m;
if k==4
    x=(x-a1(ones(n,1),:))*2*pi./r(ones(n,1),:);
else
    x=(x-a1(ones(n,1),:))*pi./r(ones(n,1),:); 
end  
switch k
    case 1       
       semicicle(0,0,1);hold on; 
        for i=1:n
            semicicle(0,0,p);
            x1=0;y1=0; 
            for j=1:m
              x1=x1+p*cos(x(i,j));
              y1=y1+p*sin(x(i,j));
              semicicle(x1,y1,p);
            end
             plot(x1,y1,'p');text(x1-0.04,y1+0.04,num2str(i));
        end
     case 2      
       semicicle(0,0,1);hold on;
        for i=1:n
            x2=0;y2=0;
            for j=1:m
             x2=x2+p*cos(x(i,j));
             y2=y2+p*sin(x(i,j));
            end
            plot(x2,y2,'p');text(x2-0.04,y2+0.04,num2str(i));
        end
       case 3     
        semicicle(0,0,1);hold on;
        for i=1:n
            x2=0;y2=0;
            for j=1:m
             x2=x2+p*cos(x(i,j));
             x5(j)=x2;
             y2=y2+p*sin(x(i,j));
             y5(j)=y2;
            end
            plot(x5,y5,'-');plot(x5(m),y5(m),'>');k4=[0 x5(1)];k5=[0 y5(1)];
            line(k4,k5);text(x2-0.04,y2+0.04,num2str(i));
        end
      case 4    
        theta=linspace(0,2*pi);
        xx=cos(theta);yy=sin(theta);
        plot(xx,yy);axis equal;hold on
         for i=1:n
            x2=0;y2=0;
            for j=1:m
             x2=x2+p*cos(x(i,j));
             y2=y2+p*sin(x(i,j));
            end
            plot(x2,y2,'p');text(x2-0.04,y2+0.04,num2str(i));
         end
        axis off
case 5      
   for i=1:n
     for j=1:m
        a(i,j)=cos(x(i,j));b(i,j)=sin(x(i,j));
     end
   end
  aa=mean(a);bb=mean(b);
   for i=1:m
     for j=1:m
       a1=0;
       for k=1:n
           a1=a1+(aa(j)-a(k,j))*(aa(i)-a(k,j))+(bb(j)-b(k,j))*(bb(i)-b(k,i));
       end
       s(i,j)=a1;
     end
   end
pp=eye(m,m);
w1=inv(s)*pp;w2=(pp'*inv(s)*pp);
p2=(w1(:,1)./w2(:,1))';      
    semicicle(0,0,1);hold on;
        for i=1:n
            x2=0;y2=0;
            for j=1:m
             x2=x2+p2(j)*cos(x(i,j));
             y2=y2+p2(j)*sin(x(i,j));
            end
            plot(x2,y2,'p');text(x2-0.04,y2+0.04,num2str(i));
        end 
end
if k~=4
    axis([-1.5 1.5 0 1.2]);axis off;
end