root/applications/dual/SIDP/bakalarka/SIDP/matlab/jednoduchy system/finalni implementace/make_box4.m @ 1351

Revision 1351, 1.4 kB (checked in by zimamiro, 13 years ago)
Line 
1function [box zero range eigvec]=make_box4(points)
2points=min(points,20*ones(size(points,1),size(points,2)));
3fi=8;
4a0=0;
5%OK
6N=size(points,1);
7dim=size(points,2);
8num_of_points=round(N^(1/dim));
9
10meanval=mean(points,1);
11eps=0.1;
12[eigvec,eigval]=eig((points-ones(N,1)*meanval)'*(points-ones(N,1)*meanval));
13range=max(2*sqrt(diag(eigval)/N),eps);
14
15%plot(points(:,1), points(:,2),'r.' ); hold on
16
17pom=zeros(4,2);
18p=1;
19%figure
20while p
21    for i=1:4
22        pom(i,:)=(range.*[(-1)^i; (-1)^floor((i-1)/2)])'*eigvec'+meanval;
23    end
24    %plot(pom(:,1),pom(:,2), 'r+'); hold on
25    if min(pom(:))<0
26        [a b]= min(pom(:,2));
27        [a c]= max(pom(:,2));
28        a1=(pom(b,1)-pom(c,1))>0;
29        range=range/1.05;
30        if range>eps
31            if a1~=a0
32                fi=2*fi;
33            end
34            a0=a1;
35            eigvec=[cos(pi/fi) (-1)^a1*sin(pi/fi);(-1)^(a1+1)*sin(pi/fi) cos(pi/fi)]*eigvec;
36        end
37    else
38        p=0;
39    end
40end
41
42
43%for i=1:2
44 %   pom=eigvec(:,i)*range(i)+meanval';
45  %  plot([meanval(1) pom(1)] , [meanval(2) pom(2)]);
46%end
47
48
49box=zeros(N,dim);
50pointer=-range;
51step=2*range/(num_of_points-1);
52jump=[1 num_of_points];
53for i=1:N
54    for k=1:dim
55        box(i,k)=pointer(k)+step(k)*mod(floor((i-1)/jump(k)),num_of_points);
56    end
57end 
58
59box=(box)*eigvec'+ones(N,1)*meanval;
60range=ones(dim,1)./(2*range);
61zero=box(1,:);
62end
Note: See TracBrowser for help on using the browser.