, (.124):
- ;
- (XP,YP) ;
- U;
-
(-U);
. 124 , Y , , .
- .
:
begin
TekUgol(X1,Y1,X2,Y2,U0);
DwaOtr(X1,Y1,U0,X,Y,90+U0,XP,YP,P);
DlinaO(X,Y,X,Y,L);
DlinaO(X,Y,XN,YN,R);
if L > R then P:=0; { }
else if (L - R) < 0.05 then begin
P:=1; XA:=R; XB:=R; YA:=0; YB:=0;
{ (XP,YP)}
end
else begin
TekUgol(XC,YC,XP,YP,U);
XA = L; XB= -L; {
(- U)}
;YB = - YA; { Y
(- U)}
end;
XTS:=XT; YTS:=YT; UgS:=Ugol;
Ugol:=U; XT:=XC; YT:=YC;
PX[1]:=XA; PY[1]:=YA; PX[2]:=XB; PY[2]:=YB;
Preobr(2);
XA:=PX[1]; YA:=PY[1]; XB:=PX[2]; YB:=PY[2];
{
}
XT:=XTS; YT:=YTS; Ugol:=UgS; { }
end;
: OtrDug(X1,Y1,Ug,XC,YC,R,XP1,YP1,XP2,YP2,P).
, :
PikOtr(XA,YA,X1,Y1,X2,Y2,P) P=1
PikOtr(XB,YB,X1,Y1,X2,Y2,P) P=0
PikDug(XA,YA,XC,YC,XN,YN, XK,YK,.,P) P=1
PikDug(XB,YB,XC,YC,XN,YN, XK,YK,.,P) P=1.
, , - , .. (=0).
(XC1,YC1), (XC2,YC2) R1, R2 (. 125):
- L ;
- U , ;
- (- U);
.
-
.
. 125
:
begin
DlinaO(X1,Y1,XC2,YC2,L);
TekUgol(XC1,YC1,XC2,YC2,U);
if (R1+R2<L) or (L+R1<R2) or (L+R2<R1) or (L<0,001) then
begin
P:=0; { }
end
else begin
; ;
; ; {
, U = 0}
XTS:=XT; YTS:=YT; UgS:=Ugol;
Ugol:= U; XT:=XC1; YT:=YC1; {
}
PX[1]:=XAP; PY[1]:=YAP; PX[2]:=XBP; PY[2]:=YBP;
{ }
Preobr(2); { }
|
|
XA:=PX[1]; YA:=PY[1]; XB:=PX[2]; YB:=PY[2]; {-
}
XT:=XTS; YT:=YTS; Ugol:=UgS; { }
end;
end;
: DugDug(XC1,YC1,R1,XC2,YC2,R2,X1,Y1,X2.Y2,P).
:
PikDug(XA,YA,XC1,YC1,XN1,YN1, XK1,YK1,.,P) P=1
PikDug(XB,YB,XC1,YC1,XN1,YN1, XK1,YK1,.,P) P=1.
PikDug(XA,YA,XC2,YC2,XN2,YN2, XK2,YK2,.,P) P=1
PikDug(XB,YB,XC2,YC2,XN2,YN2, XK2,YK2,.,P) P=1.
(. 126).
Procedure Naprawl(Xc,Yc,Xn,Yn,Xk,Yk: Float;.: byte);
var U1,U2,UU: Float;
begin
TekUgol(Xc,Yc,Xn,Yn,U1);
TekUgol(Xc,Yc,Xk,Yk,U2);
{
}
UU:=abs(U1-U2);
if (U1<U2) and (UU<180)
then :=1
else if (U1<U2) and (UU>180)
then :=2
else if (U1>U2) and (UU<180)
then :=2
else :=1;
. 126 end;
: Naprawl(Xc,Yc,Xn,Yn,Xk,Yk,);
Procedure
Tch_NiK(X Cg,YCg,Xg1,Yg1,Xg2,Yg2,Xs,Y s,X Tn,YTn,LD k);
¯
NOKO S NK NK (. 127). NOKO. NK NK.
NOS - SN
. 127 NS - SK - KS - SKO .. . , SN SK NOKO.
S LS ( ). , () . NO Tn , Tk .
LDk Tn k. Tn Te Tn Tb , Tb NOKO, SNe, Skb. NOKO , SNe, - SKb. , NOKO.
begin
if Obhod=1 then Hod:=2 else Hod:=1; {
Hod }
, , :
if El=1 then begin
:
TekUgol(Xg1, Yg1, Xg2, Yg2,Ug);
OtrDug(Xg1,Yg1,Ug,Xs,Ys,Ri,XP1,YP1,XP2,YP2,P);
{Ri - }
(XTn,YTn) (XTk,YTk) :
DlinaL(Xg1,Yg1,XP1,YP1,L1);
DlinaL(Xg1,Yg1,XP2,YP2,L2);
if L1<L2 then begin
XTn:=XP1; YTn:=YP1; XTk:=XP2; YTk:=YP2;
end
else begin
XTn:=XP2; YTn:=YP2; XTk:=XP1; YTk:=YP1;
end;
Tk :
PikOtr(XTk,YTk,Xg1,Yg1,Xg2,Yg2,P);
|
|
LDk:
if P=1 then LDk:=180 else LDk:=360;
{Ldk - max , LD<=LDk .
S , LDk=360.
LDk=180}
end
, , :
else begin
:
DugDug(XCg,YCg,R,Xs,Ys,Ri,XP1,YP1,XP2,YP2,P);
(Xg1,Yg1) (XP1,YP1), (XP2,YP2):
DlinaD(Xg,YCg,Xg1,Yg1,XP1,YP1,Nag,LD1);
DlinaD(XCg,YCg,Xg1,Yg1,XP2,YP2,Nag,LD2);
(XTn,YTn) (XTk,YTk) :
if LD1<LD2 then begin
XTn:=XP1; YTn:=YP1; XTk:=XP2; YTk:=YP2;
end
else begin
XTn:=XP2; YTn:=YP2; XTk:=XP1; YTk:=YP1;
end;
LDk:
DlinaD(Xs,Ys,XTn,YTn,XTk,YTk,Hod,LDk);
end;
end;
3.3.11.
- ,
:
RisLineBox(Bx, El, Napr, X1, Y1, X2, Y2, XC, YC), :
Bx -
Bx;
El - (1 - , 2 - );
Napr - (1- , 2 - );
X1, Y1 - ;
X2, Y2 - ;
XC, Y - ;
- , 1- N( )
: