summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketcindy/ketlib/ketpicscifiles6/Reflectdata.sci
blob: 837a5727e2084d2a3e261e8a94c67422d80a3fa9 (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
// 08.05.25 Koshikawa
// 08.09.20
// 15.04.12

function OutL=Reflectdata(varargin)
  Nargs=length(varargin)    
  ML=varargin(1);
  ML=Flattenlist(ML);
  if Nargs==1
    PtA=[0,0];PtB=PtA;
  else
    Pts=varargin(2);
    if length(Pts)==2
      PtA=Pts; PtB=PtA;
    else
      PtA=Pts(1,1:2); PtB=Pts(1,3:4);
    end
  end  
  OutL=[];
  for N=1:length(ML)
    GL=Op(N,ML);
    Out=[];
    for I=1:size(GL,1)
      Tmp=GL(I,:);
      X1=Tmp(1);
      Y1=Tmp(2);
      if Tmp==[%inf,%inf]
        X2=X1;
        Y2=Y1;
      else
        if PtA==PtB
          X2=2*PtA(1)-X1;
          Y2=2*PtA(2)-Y1;
        else  
          U=PtB(1)-PtA(1);
          V=PtB(2)-PtA(2);
          A=PtA(1);
          B=PtA(2);
          X2=(U^2-V^2)/(U^2+V^2)*X1+2*U*V/(U^2+V^2)*Y1-2*V*(U*B-V*A)/(U^2+V^2);
          Y2=2*U*V/(U^2+V^2)*X1-(U^2-V^2)/(U^2+V^2)*Y1+2*U*(U*B-V*A)/(U^2+V^2);
        end
      end
      Out=[Out;X2,Y2];
    end;
    OutL=Mixadd(OutL,Out);
  end;
  if length(OutL)==1
    OutL=Op(1,OutL);
  end;
endfunction;