summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketcindy/ketlib/ketpicscifiles6/Invparapt.sci
blob: 4d7863b1c4708aa18d0735e2bef00b7cbf346473 (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
// 08.07.11
// 08.08.17
// 09.10.31
// 09.11.12

function Out=Invparapt(varargin)
  Eps=10^(-4);
  Fk=varargin($);
  NFk=Numptcrv(Fk)    
  Tmp=varargin(1);
  if type(Tmp)==1 & size(Tmp)==1
    Ph=Tmp;
    Fh=varargin(2);
  else
    Fh=Projpara(Fk);
    if NFk>2
      Tmp1=Nearestpt(Tmp,Fh);
      Ph=Tmp1(2);
    else
      Ah=Ptcrv(1,Fh); Bh=Ptcrv(2,Fh);
      V1=Tmp-Ah; V2=Bh-Ah;
      Tmp1=Crossprod(V1,V2);
      if abs(Tmp1)>Eps
        disp('Not on the line');
        Out=[];
        return;
      else
        Ph=Dotprod(V1,V2)/norm(V2)^2+1;  // 09.11.12
      end;
    end;
  end;
  if NFk>2
    N=Trunc(Ph);
    S0=Ph-N;
    if Ph>Numptcrv(Fh)-Eps
      Out=list(Ptend(Fk),Numptcrv(Fh));
      return;
    end;
  else
    N=1;
    S0=Ph-1;  // 09.11.12
  end;
  Ak=Ptcrv(N,Fk); Bk=Ptcrv(N+1,Fk);
  Ah=Ptcrv(N,Fh); Bh=Ptcrv(N+1,Fh);
  Ph=(1-S0)*Ah+S0*Bh;
  T2=S0;
  Pk=(1-T2)*Ak+T2*Bk;
  Out=list(Pk,N+T2);
endfunction