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;
|