// 08.08.21 // 09.10.24 // 09.10.26 function Menkakusi(Face,Nf,Ptype) global THETA PHI EyePoint FocusPoint VELNO VELHI; Eps0=10^(-6); Eps=10^(-4); Tmp1=Face(1)-Face(2); Tmp2=Face(3)-Face(2); if norm(Tmp1)-Eps Out1L($+1)=list(Edge,Ne,Nenm); else Out2L($+1)=list(Edge,Ne,Nenm); end; end; continue; end; Flg=0; for I=1:Mixlength(VL)-1 Tmp=VL(I+1)-VL(I); if norm(Tmp)-Eps Out1L($+1)=list(Edge,Ne,Nenm); else Out2L($+1)=list(Edge,Ne,Nenm); end; end; continue; end; if Tmp>1-Eps if Ng1==0 Out1L($+1)=list(Edge,Ne,Nenm); else Tmp1=Edge(1)-Face(1); Tmp1=Dotprod(Tmp1,Vec); if Tmp1>-Eps Out1L($+1)=list(Edge,Ne,Nenm); else Out2L($+1)=list(Edge,Ne,Nenm); end; end; continue; end; if Ng1==0 & Ng2==0 Out1L($+1)=list(Edge,Ne,Nenm); else Tmp1=KL(1); Tmp1=Tmp1(1); if Ptype==-1 Tmp=Invperspt(Tmp1,Spaceline(Edge)); else Tmp=Invparapt(Tmp1,Spaceline(Edge)) end; Ak=Tmp(1); if Ng1==1 Tmp1=Edge(1)-Face(1); Tmp1=Dotprod(Tmp1,Vec); if Tmp1>-Eps Out1L($+1)=list(Edge,Ne,Nenm); else Tmp2=list(Ak,Edge(2)); Out1L($+1)=list(Tmp2,Ne,Nenm); Tmp2=list(Edge(1),Ak); Out2L($+1)=list(Tmp2,Ne,Nenm); end; end; if Ng2==1 Tmp1=Edge(2)-Face(1); Tmp1=Dotprod(Tmp1,Vec); if Tmp1>-Eps Out1L($+1)=list(Edge,Ne,Nenm); else Tmp2=list(Edge(1),Ak); Out1L($+1)=list(Tmp2,Ne,Nenm); Tmp2=list(Ak,Edge(2)); Out2L($+1)=list(Tmp2,Ne,Nenm); end; end; end; end; if Mixlength(KL)==2 Tmp1=KL(1); Tmp1=Tmp1(2); Tmp2=KL(2); Tmp2=Tmp2(2); if Tmp1>Tmp2 KL=list(KL(2),KL(1)); end; Tmp=Spaceline(Edge); Tmp1=KL(1); Tmp1=Tmp1(1); Tmp2=KL(2); Tmp2=Tmp2(1); if Ptype==-1 Ak=Mixop(1,Invperspt(Tmp1,Tmp)); Bk=Mixop(1,Invperspt(Tmp2,Tmp)) else Ak=Mixop(1,Invparapt(Tmp1,Tmp)); Bk=Mixop(1,Invparapt(Tmp2,Tmp)) end; Tmp1=(Ak+Bk)*0.5-Face(1); Tmp=Dotprod(Tmp1,Vec); if Tmp>-Eps Out1L($+1)=list(Edge,Ne,Nenm); else Out1L($+1)=list(list(Edge(1),Ak),Ne,Nenm); Out1L($+1)=list(list(Bk,Edge(2)),Ne,Nenm); Out2L($+1)=list(list(Ak,Bk),Ne,Nenm); end; end; end; VELNO=Out1L; VELHI=Out2L; endfunction