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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
// 08.05.31
// 08.11.12
// 09.10.12
// 09.10.14
// 15.04.10
function AnsL=EnclosingS(varargin)
global MilliIn;
Nargs=length(varargin);
AnsL=[];
PdataL=varargin(1);
Nall=length(PdataL);
Eps=10^(-3);
EEps=0.1;
S=[];
Flg=0;
for I=2:Nargs
Tmp=varargin(I);
if type(Tmp)==1 & size(Tmp,1)==1 & size(Tmp,2)>1
S=Tmp;
end
if type(Tmp)==1 & length(Tmp)==1
if Flg==0
Eps=Tmp;
Flg=Flg+1
else
EEps=Tmp
end
end
end
F=Op(1,PdataL); G=Op(Nall,PdataL);
KL=IntersectcrvsPp(F,G);
if length(KL)==1
Tmp=Op(1,KL);
P=Op(1,Tmp);
T1=Op(2,Tmp);
end
if length(KL)==0
if Numptcrv(F)>Numptcrv(G)
Tmp=Nearestpt(F,G);
P=Op(1,Tmp);
T1=Op(2,Tmp);
else
Tmp=Nearestpt(G,F);
P=Op(3,Tmp);
T1=Op(4,Tmp);
end
end
if length(KL)>1 // 15.04.10
if S==[]
disp('No Start Point');
return
end;
Tmp=Op(1,KL);
P=Op(1,Tmp);
T1=Op(2,Tmp);
Tmp=norm(P-S);
for I=2:length(KL)
Tmp1=Op(1,Op(I,KL));
Tmp2=norm(Tmp1-S);
if Tmp2<Tmp
P=Tmp1;
T1=Op(2,Op(I,KL));
Tmp=Tmp2;
end
end
end
S=P;
AnsL=[];
for N=1:Nall
F=Op(N,PdataL);
if N>1 P=Q;end
if N==Nall
Q=S;
else
Flg=0;
G=Op(N+1,PdataL);
KL=IntersectcrvsPp(G,F);
if length(KL)==1
Tmp=Op(1,KL);
Q=Op(1,Tmp);
T3=Op(2,Tmp);
Flg=10;
end
if length(KL)==0 Flg=1; end
if length(KL)>=2 // Maple bug?
Tmp1=Op(1,Op(1,KL));
Tmp2=Op(1,Op(2,KL));
Tmp=norm(Tmp1-Tmp2);
if Tmp<Eps*10 Flg=1; end
end
if Flg==1
if Numptcrv(F)>Numptcrv(G)
Tmp=Nearestpt(F,G);
Q=Op(1,Tmp);
T3=Op(4,Tmp);
Flg=10;
else
Tmp=Nearestpt(G,F);
Q=Op(3,Tmp);
T3=Op(2,Tmp);
Flg=10;
end
end
if Flg<10
T2=%inf;
for I=1:length(KL)
Dt=Op(I,KL);
Tmp1=Op(1,Dt);
Tmp=Op(3,Dt);
Tmp2=Paramoncrv(Tmp1,Tmp,F);
Tmp3=Op(2,Dt);
if (Tmp2>T1+Eps) & (Tmp2<T2+Eps)
Q=Tmp1;
T2=Tmp2;
T3=Tmp3;
end
end
end
end
Tmp=Partcrv(P,Q,F);
T1=T3;
AnsL=Mixadd(AnsL,Tmp);
end
endfunction
|