function Duga1(X1,Y1,Xc,Yc,R,K) { OUT = {Xa:undefined, Ya:undefined, Sa:undefined, Ca:undefined, Prizn:undefined} Dx=(Xc-X1)*K; Dy=(Yc-Y1)*K; Dl=Math.sqrt(Sqr(Dx)+Sqr(Dy)); if (Math.abs(Dl)<0) { OUT.Prizn="Inside"; return OUT; } OUT.Prizn="Outside"; Ss=R/Dl; Sa=Dy/Dl; OUT.Sa=Sa; Ca=Dx/Dl; OUT.Ca=Ca; Da=ArcSin(Ss); if (Math.abs(Sqr(Dl)-Sqr(R))<=Eps) { OUT.Prizn="OnThe"; return OUT; } if (Sqr(Dl)-Sqr(R)<=0) { OUT.Prizn="Inside"; return OUT; } Dl1=Math.sqrt(Sqr(Dl)-Sqr(R)); Al=ArcSin(Sa); if (Ca<0) Al=-Al+Math.PI; Al=Al-Da*K; Sa=Math.sin(Al); OUT.Sa=Sa; Ca=Math.cos(Al); OUT.Ca=Ca; Xa=X1+K*(Dl1*Ca); OUT.Xa=Xa; Ya=Y1+K*(Dl1*Sa); OUT.Ya=Ya; return OUT; } // Duga1 function EExecP4_1(out_prm1,out_prm2,in_prm1,in_prm2,Att_1,Att_2,Sg1,Sg2) { if ((in_prm1.OB==undefined) || (in_prm2.OB==undefined)) return false; var X=new Object(); var Y=new Object(); var p2=new Object(); var d2=new Object(); var p4=new Object(); Result=true; CreateCopy(Y,in_prm1); CreateCopy(X,in_prm2); EExecPA(p2,Y,Att0,1*Sg1); EExecDN(d2,X,p2,Att0,1*Sg2,1); EExecP3(out_prm2,p4,d2,Y,Att0,Att0,1,1*Sg1); EExecO0(out_prm1,out_prm2,X,Att0,1,1*Sg2); return Result; } // EExecP4_1 function EExecP4(Out_Prm1,Out_Prm2,X,Y,Att1,Att2,Sg1,Sg2) { if ((X.OB==undefined) || (Y.OB==undefined)) return false; var X2={Re:undefined, Im:undefined} var Y2={Re:undefined, Im:undefined} var X3={Re:undefined, Im:undefined} var Y3={Re:undefined, Im:undefined} var X4={Re:undefined, Im:undefined} var Y4={Re:undefined, Im:undefined} var X5={Re:undefined, Im:undefined} var Y5={Re:undefined, Im:undefined} var X6={Re:undefined, Im:undefined} var Y6={Re:undefined, Im:undefined} var X7={Re:undefined, Im:undefined} var Y7={Re:undefined, Im:undefined} var XX={Re:undefined, Im:undefined} var YY={Re:undefined, Im:undefined} Result=false; if ((X.OB=="P") && (Y.OB=="D")) { X1=X.X; Y1=X.Y; Xc=Y.Xc.Re; Yc=Y.Yc.Re; R=Y.R.Re; X2.Re=0; X2.Im=0; Y2.Re=0; Y2.Im=0; if (X.W==1) { DG=Duga1(X1.Re,Y1.Re,Xc,Yc,R,Sg2); X2=DG.X2; Y2=DG.Y2; Cc=DG.Ca; Ss=DG.Sa; if ((DG.Prizn=="Outside") || (DG.Prizn=="Inside")) { EExecP4_1(Out_Prm1,Out_Prm2,Y,X,Att1,Att2,Sg2,Sg1); Result=true; return Result; } if (DG.Prizn=="Inside") { if (Att1.Chk==1) TOEmpty_Create(Out_Prm1,Att1); if (Att2.Chk==1) TOEmpty_Create(Out_Prm2,Att2); Result=true; return Result; } if (DG.Prizn=="OnThe") { TOPoint_Create(Out_Prm2,X1,Y1,1,Att2); X2=MCompl(Y.Xc.Re,0); Y2=MCompl(Y.Yc.Re,0); Dx=90; SCDP=SC(X2.Re,Y2.Re,X1.Re,Y1.Re); Df=Fi(0,1,SCDP.S,SCDP.C); Dx=Dx*Math.PI/180+Df; X5.Re=X1.Re+100*Math.cos(Dx)*Sg2; X5.Im=0; Y5.Re=Y1.Re+100*Math.sin(Dx)*Sg2; Y5.Im=0; TOLine_Create(Out_Prm1,X1,Y1,1,X5,Y5,1,brn_UnLimited,"sobstv",Att1); AddInc(Out_Prm1,Out_Prm2); AddInc(Y,Out_Prm2); AddInc(Out_Prm1,X); Result=true; return Result; } TOPoint_Create(Out_Prm2,X2,Y2,1,Att2); TOLine_Create(Out_Prm1,X1,Y1,1,X2,Y2,1,brn_Limited,"sobstv",Att1); AddInc(Out_Prm1,Out_Prm2); AddInc(Out_Prm1,X); AddInc(Y,Out_Prm2); Result=true; return Result; } if (X.W=0) { Dl=Math.sqrt(Sqr(X.X.Re)+Sqr(X.Y.Re)); if (Dl>0) { S1=X.Y.Re/Dl; C1=X.X.Re/Dl; } Df=Fi(0,1,S1,C1); if (Df<0) Df=2*Math.PI+Df; Dx=Df+Math.PI; X5.Re=Xc+100*Math.cos(Dx);X5.Im=0; Y5.Re=Yc+100*Math.sin(Dx);Y5.Im=0; X4.Re=Xc-100*Math.cos(Dx);X4.Im=0; Y4.Re=Yc-100*Math.sin(Dx);Y4.Im=0; Dxx=R; Value=Dxx/Math.sqrt(Sqr(X5.Re-X4.Re)+Sqr(Y5.Re-Y4.Re))*Sg2; X3.Re=X4.Re+(Y5.Re-Y4.Re)*Value; Y3.Re=Y4.Re-(X5.Re-X4.Re)*Value; Value=100/Math.sqrt(Sqr(X5.Re-X4.Re)+Sqr(Y5.Re-Y4.Re)); X6.Re=X3.Re-Value*(X5.Re-X4.Re); Y6.Re=Y3.Re-Value*(Y5.Re-Y4.Re); X7.Re=X3.Re+Value*(X5.Re-X4.Re); Y7.Re=Y3.Re+Value*(Y5.Re-Y4.Re); X3.Im=0; Y3.Im=0; X6.Im=0; Y6.Im=0; X7.Im=0; Y7.Im=0; TOLine_Create(Out_Prm1,X6,Y6,1,X7,Y7,1,brn_UnLimited,"sobstv",Att1); SCDP=SC(X1.Re,Y1.Re,X2.Re,Y2.Re); SCDP=SC(X1.Re,Y1.Re,X2.Re,Y2.Re); Df=Fi(0,1,SCDP.S,SCDP.C); X3.Re=Xc; Y3.Re=Yc; //DxR; Dx=Dx+Math.PI/2; X5.Re=X3.Re+100*Math.cos(Dx);X5.Im=0; Y5.Re=Y3.Re+100*Math.sin(Dx);Y5.Im=0; X4.Re=X3.Re-100*Math.cos(Dx);X4.Im=0; Y4.Re=Y3.Re-100*Math.sin(Dx);Y4.Im=0; XX.Im=0; YY.Im=0; LL=LinLin(X4.Re,Y4.Re,X5.Re,Y5.Re,X6.Re,Y6.Re,X7.Re,Y7.Re); XX.Re=LL.X; YY.Re=LL.Y; TOPoint_Create(Out_Prm2,XX,YY,1,Att2); // if (Out_Prm1.PointBelongs(XX.Re,YY.Re)) // { // AddInc(Out_Prm1,Out_Prm2); // AddInc(Out_Prm1,X); // AddInc(Y,Out_Prm2); // } Result=true; return Result; } } else if ((X.OB=="P") && (Y.OB=="P")) { TOPoint_Create(Out_Prm2,Y.X,Y.Y,1,Att2); TOLine_Create(Out_Prm1,X.X,X.Y,1,Y.X,Y.Y,1,brn_Limited,"sobstv",Att1); AddInc(Out_Prm1,Out_Prm2); AddInc(Out_Prm1,X); AddInc(Y,Out_Prm2); Result=true; return Result; } else { if (Att1.Chk==1) TOEmpty_Create(Out_Prm1,Att1); if (Att2.Chk==1) TOEmpty_Create(Out_Prm2,Att2); Result=true; return Result; } return Result; } // EExecP4