summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketpic/ketlib/ketpicscifiles6/Kyoukai.sci
blob: 4090c2da01e267a0bdf99212ba7e67fb32c0b078 (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
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// 08.05.18
// 08.05.19
// 08.05.20
// 08.05.30
// 08.09.19
// 08.10.26
// 09.01.15  "e"
// 09.05.18
// 09.12.05
// 16.11.03 Eps=10^(-5)
// 16.12.05 Eps=10^(-7)

function PLall=Kyoukai(varargin)
  global XMIN XMAX YMIN YMAX
  Nargs=length(varargin);
  Eps0=10^(-7);
  DataL=[];
  for I=1:Nargs
    Tmp=varargin(I);
    if Mixtype(Tmp)==1
      Tmp1=MixS(Tmp);
      DataL=Mixadd(DataL,Tmp1);
    end
    if Mixtype(Tmp)==2
      DataL=Mixadd(DataL,Tmp);
    end
    if Mixtype(Tmp)==3
      DataL=Mixjoin(DataL,Tmp);
    end
  end;
  Eps=10.0^(-4);
  PLall=[];
  Sflg=0;
  N=Mixlength(DataL);
  for I=1:N
    Data=Op(I,DataL);
    Tmp=Op(Mixlength(Data),Data);
    if type(Tmp)==1 & size(Tmp,1)==1 & size(Tmp,2)>1
      Rg=Tmp ; Nd=Mixlength(Data)-1;
    elseif type(Tmp)==10
      Rg=Tmp ; Nd=Mixlength(Data)-1;
    else 
      Rg='c' ; Nd=Mixlength(Data);
    end;
    for J=1:Nd
      Tmp=Op(J,Data);
      if type(Tmp)==10
        Rg=Tmp;
        continue
      end
      Points=Tmp;
      P1=Ptstart(Points);
      P2=Ptend(Points);
      if J==1
        PL=Points;
        Pfirst=P1;
        Plast=P2;
        if Nd>=2
          Tmp=Op(2,Data);
          P=Ptstart(Tmp);
          Q=Ptend(Tmp);
          if norm(P2-P)>Eps & norm(P2-Q)>Eps
            Tmp=size(PL,1);
            PL=PL(Tmp:-1:1,:);
            Pfirst=Ptstart(PL);
            Plast=Ptend(PL);
          end;
        end
      else
        if norm(P1-Plast)<Eps 
          Stp=1; Ks=2; Ke=size(Points,1);
        elseif norm(P2-Plast)<Eps 
          Stp=-1; Ks=size(Points,1)-1; Ke=1;
        else
          PL=[PL;%inf,%inf;Points];
          Sflg=1;
          Pfirst=P1;
          Plast=P2;
          Stp=1; Ks=size(Points,1)-1; Ke=1;
        end
        for K=Ks:Stp:Ke
          PL=[PL;Points(K,:)];
        end
        Plast=Points(Ke,:);
      end
    end  
    if norm(Pfirst-Plast)>Eps
      Np=size(PL,1);
      if Rg=='c'
        PL=[PL;Pfirst];
      elseif Rg=='s'
        Tmp=[PL(1:Np,2);YMIN];
        Y=min(Tmp)-1;
        P=[Plast(1),Y]; Q=[Pfirst(1),Y];
        PL=[PL;P;Q;Pfirst];
      elseif Rg=='n'
        Tmp=[PL(1:Np,2);YMAX];
        Y=max(Tmp)+1;
        P=[Plast(1),Y]; Q=[Pfirst(1),Y];
        PL=[PL;P;Q;Pfirst];
      elseif Rg=='w'
        Tmp=[PL(1:Np,1);XMIN];
        X=min(Tmp)-1;
        P=[X,Plast(2)]; Q=[X,Pfirst(2)];
        PL=[PL;P;Q;Pfirst];
      elseif Rg=='e'
        Tmp=[PL(1:Np,1);XMAX];
        X=max(Tmp)+1;
        P=[X,Plast(2)]; Q=[X,Pfirst(2)];
        PL=[PL;P;Q;Pfirst];
      elseif type(Rg)==1 & size(Rg,1)==1 & size(Rg,2)>1
        Tmp=Kukeiwake(PL);  //Modified from here
        Tmp1=Op(1,Tmp);
        Tmp2=Naigai(Rg,Mix(Tmp1)); 
        if Tmp2==[1]
          PL=Op(1,Tmp);
        else
          PL=Op(2,Tmp);       // to here
        end
      end
    end
    Tmp=[Ptstart(PL)];
    for J=2:size(PL,1)
      P=PL(J,:);
      Q=Tmp(size(Tmp,1),:);
      if norm(P-Q)>Eps then
        Tmp=[Tmp;P];
      end
    end
    PL=Tmp;
    PLall=Mixadd(PLall,PL);
  end
  if Mixlength(PLall)==1 & Sflg==0
    Tmp=Op(1,PLall);
//    Tmp=Op(1,Tmp);
    if norm(Ptstart(Tmp)-Ptend(Tmp))>Eps0
       Tmp=[Tmp;Ptstart(Tmp)];
       PLall=MixS(Tmp);
    end
  end;
endfunction;