summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketcindy/ketlib/ketpicscifiles6/Nearestpt.sci
blob: a404370a4314548f5798fea9fe1b354f9a042040 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// 08.05.31
// 08.06.03
// 08.10.07

function Ans=Nearestpt(varargin)
  Nargs=length(varargin);
  PL1=varargin(1);
  if size(PL1,1)==1
    Flg=0;
  else
    Flg=1
  end
  Eps=10.0^(-6);
//  Fig=varargin(2);
  PL=varargin(2);
  Ans=MixS(PL1(1,:),1,PL(1,:),1,norm(PL1(1,:)-PL(1,:)));
  for N=1:size(PL1,1)
    PA=PL1(N,:);
    Pm=PL(1,:);
    Im=1;
    Sm=norm(Pm-PA);
    for I=1:size(PL,1)-1
      A1=PL(I,1); A2=PL(I,2);
      B1=PL(I+1,1); B2=PL(I+1,2);
      V1=B1-A1; V2=B2-A2;
      X1=PA(1); X2=PA(2);
      Tmp=V2^2+V1^2;
      if abs(Tmp)<Eps
        continue;
      end;
      T=(-A2*V2-V1*A1+V1*X1+X2*V2)/Tmp;
      if T<-Eps
        P=[A1,A2];
      elseif T>1+Eps
        P=[B1,B2];
      else
        P=[A1+T*V1,A2+T*V2];
      end
      S=norm(P-PA);
      if S<Sm-Eps
        Tmp=ParamonCurve(P,I,PL);
        Pm=P; Im=Tmp; Sm=S;
      end
    end
    if Sm<Op(5,Ans)
      Ans=MixS(PA,N,Pm,Im,Sm);
    end
  end
  if Flg==0
    Ans=Mixsub(3:5,Ans);
  end
endfunction;