summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketpic/ketlib/ketpicscifiles6/IntersectselfPp.sci
diff options
context:
space:
mode:
Diffstat (limited to 'texmf-dist/scripts/ketpic/ketlib/ketpicscifiles6/IntersectselfPp.sci')
-rwxr-xr-xtexmf-dist/scripts/ketpic/ketlib/ketpicscifiles6/IntersectselfPp.sci95
1 files changed, 95 insertions, 0 deletions
diff --git a/texmf-dist/scripts/ketpic/ketlib/ketpicscifiles6/IntersectselfPp.sci b/texmf-dist/scripts/ketpic/ketlib/ketpicscifiles6/IntersectselfPp.sci
new file mode 100755
index 00000000..4b246e95
--- /dev/null
+++ b/texmf-dist/scripts/ketpic/ketlib/ketpicscifiles6/IntersectselfPp.sci
@@ -0,0 +1,95 @@
+// 09.05.27
+// 09.06.03
+// 09.06.05
+
+function KL=IntersectselfPp(varargin)
+ Nargs=length(varargin);
+ G1=varargin(1);
+ Eps=10.0^(-4);
+ if Nargs>1
+ Eps=varargin(2)
+ end
+ Eps0=10.0^(-5);
+ Eps2=0.01;
+// if Nargs>2
+// Eps2=varargin(3)
+// end;
+ Data1=G1;
+ KL1=[];
+ KL2=[];
+ for I=1:size(Data1,1)-2
+ A=Data1(I,:);
+ B=Data1(I+1,:);
+ Is=I+2;
+ Tmp=Data1(Is,:);
+ while norm(Tmp-B)<Eps & Is<size(Data1,1);
+ Is=Is+1;
+ Tmp=Data1(Is,:);
+ end;
+ for J=Is:size(Data1,1)-1
+ P=Data1(J,:); Q=Data1(J+1,:);
+ Tmp=Koutenseg(A,B,P,Q,Eps,Eps2);
+ if Tmp~=[%inf,-%inf]
+ if Op(3,Tmp)==0
+ Tmp1=MixS(Op(1,Tmp),Op(2,Tmp),I,J);
+ KL1=Mixadd(KL1,Tmp1);
+ else
+ Tmp2=MixS(Op(1,Tmp),Op(2,Tmp),I,J);
+ KL2=Mixadd(KL2,Tmp2);
+ end
+ end
+ end
+ end
+ KL=[];
+ if Mixlength(KL1)>0
+ Tmp=Op(1,KL1);
+ P=Op(1,Tmp);
+ T=Op(2,Tmp);
+ I=Op(3,Tmp);
+ J=Op(4,Tmp);
+ S=ParamonCurve(P,J,Data1);
+ Tmp=MixS(P,I+T,J);
+ Tmp2=MixS(P,S,I);
+ KL=MixL(Tmp);
+ KL=Mixadd(KL,Tmp2);
+ end;
+ for N=2:Mixlength(KL1)
+ Tmp=Op(N,KL1);
+ P=Op(1,Tmp);
+ T=Op(2,Tmp);
+ I=Op(3,Tmp);
+ J=Op(4,Tmp);
+ S=ParamonCurve(P,J,Data1);
+ Tmp=MixS(P,I+T,J);
+ Tmp1=MixS(P,S,I);
+ KL=Mixadd(KL,Tmp);
+ KL=Mixadd(KL,Tmp1);
+ end
+ for N=1:Mixlength(KL2)
+ Tmp=Op(N,KL2);
+ P=Op(1,Tmp);
+ T=Op(2,Tmp);
+ T=min(max(T,0),1);
+ I=Op(3,Tmp);
+ J=Op(4,Tmp);
+ S=ParamonCurve(P,J,Data1);
+ Flg=0;
+ for K=1:Mixlength(KL)
+ Tmp=Op(K,KL);
+ if norm(P-Op(1,Tmp))<Eps
+ Tmp1=Op(2,Tmp);
+ if abs(I+T-Tmp1)<Eps
+ Flg=1;
+ break;
+ end;
+ end;
+ end;
+ if Flg==0
+ Tmp=MixS(P,I+T,J);
+ Tmp1=MixS(P,S,I);
+ KL=Mixadd(KL,Tmp);
+ KL=Mixadd(KL,Tmp1);
+ end;
+ end;
+endfunction;
+