summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketpic/ketlib/ketpicscifiles6/Clipindomain.sci
blob: bf9572c59b725df9e98b2886e895b32c1ab318b4 (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
// 08.09.10
// 08.09.16
// 09.12.31 (gsort)

function OutL=Clipindomain(ObjL,FigL)
  EEps=10^(-4);
  Eps=0.01;
  Eps2=0.2;
  Bdy=Kyoukai(FigL);
  if Mixlength(Bdy)>=2
     Fbdy=Joincrvs(FigL)
  else
     Fbdy=Mixop(1,FigL);
  end;
  if Mixtype(ObjL)==1
    ObjL=Mix(ObjL)
  end;
  if Mixtype(FigL)==1
    FigL=Mix(FigL)
  end;
  OutL=[];
  for Nobj=1:Mixlength(ObjL);
    Obj=Mixop(Nobj,ObjL);
    ParL=[1,Numptcrv(Obj)];
    Tmp=IntersectcrvsPp(Obj,Fbdy,Eps,Eps2);
    for J=1:Mixlength(Tmp)
      Tmp1=Mixop(J,Tmp);
      ParL=[ParL,Mixop(2,Tmp1)];
    end;
    ParL=gsort(ParL);
    ParL=ParL(length(ParL):-1:1);
    Tmp=[1];
    for I=1:length(ParL)
      Tmp1=Tmp(length(Tmp));
      Tmp2=ParL(I);
      if Tmp2-Tmp1>EEps
        Tmp=[Tmp,Tmp2];
      end;
    end;
    ParL=Tmp;
    Tmp1=ParL(length(ParL));
    Tmp2=Numptcrv(Obj);
    if abs(Tmp1-Tmp2)<Eps
      ParL=[ParL(1:length(ParL)-1),Tmp2];
    end;
    Fig=[];
    for N=1:length(ParL)-1
      Tmp=(ParL(N)+ParL(N+1))*0.5;
      Tmp=PointonCurve(Tmp,Obj);
      Tmp=Naigai(Tmp,Bdy);
      Tmp1=modulo(sum(Tmp),2);
      if Tmp1==0 continue; end;
      Fig=Mixadd(Fig,Partcrv(ParL(N),ParL(N+1),Obj));
    end;
    OutL=Mixjoin(OutL,Fig);
  end;
endfunction;