. - (XT, YT) .
Procedure PP(var PX,PY: RealWektor; N: byte);
var XX: Float;
begin
if Ugol <> 0 then begin
while N>0 do begin
XX:=PX[N];
PX[N]:=XT + XX´Cos(Ugol) + PY[N]´Sin(Ugol);
PY[N]:=YT - XX´Sin(Ugol) + PY[N]´Cos(Ugol);
Dec(N);
end;
end
else begin
while N>0 do begin
PX[N]:=XT + PX[N];
PY[N]:=YT + PY[N];
Dec(N);
end;
end;
end;
Procedure Preobr(N:byte);
begin
PP(PX,PY,N)
end;
4- (. 121):
-
. 121 XTS:=XT; YTS:=YT; Ugs:= Ugol;
- XT:=XT1; YT:=YT1; Ugol:= U;
- PX[1]:=X1; PY[1]:=Y1; PX[2]:=X2; PY[2]:=Y2; PX[3]:=X3;
PY[3]:=Y3; PX[4]:=X4; PY[4]:=Y4; { }
- Preobr(4);
-
X1:=PX[1]; Y1:=PY[1]; X2:=PX[2]; Y2:=PY[2]; X3:=PX[3]; Y3:=PY[3];
X4:=PX[4]; Y4:=PY[4];
-
XT:=XTS, YT:=YTS, Ugol:= Ugs.
3.3.6.
(XC,YC), (X1,Y1), (X2,Y2) ( = 1 - , = 2 - ) (. 122).
Ug (,YC) (- Ug), UD .
:
begin
DlinaO(XC,YC,X1,Y1,R); { }
DlinaO(X1,Y1,X2,Y2,L); { }
if R>0 then begin
if (LT<=0.01) or ((X1=X2) and (Y1=Y2))
. 122 then begin
if .=1 then UD=360
else UD=0;
end
else begin
TekUgol(XC,YC,X1,Y1,Ug);
XTS:=XT; YTS:=YT; UgS:=Ugol;
XT:=0; YT:=0; Ugol:= - Ug;
PX[1]:=X2-XC; PY[1]:=Y2-YC;
{ }
Preobr[1];
TekUgol(XC,YC,PX[1]+X2,PY[1]+Y2,UD);
if (UD>Ug) and (.=1) then UD:=UD
else UD:=360 - UD;
if (.=1) and ((UD<=0.01) or (UD>=359.99)
then UD:=360
else UD:=0;
XT:=XTS; YT:=YTS; Ugol:= UgS;
end;
end;
0,0001.
: DlinaD(XC,YC,X1,Y1, X2,Y2,.,UD).
:
begin
DlinaO(XC,YC,X1,Y1,R); { }
DlinaO(X,Y,X,Y,L); { (. 123)}
DlinaO(X1,Y1,X,Y,L1); { }
DlinaO(X2,Y2,X,Y,L2); { }
DlinaD(XC,YC,X1,Y1, X2,Y2,1,UD);
{ }
DlinaD(XC,YC,X1,Y1, X,Y,1,U); { (X,Y)}
if (abc(LT-R)<0.05 and (R>0) then begin
if (L1 < 0.05) or (L2 < 0.05) then P:=1
else if UD > U then P:=1
. 123 else P:=0;
end
else P:=0;
end;
= 1 - , = 0 - . .=1, .. .
: PikDug(X,Y,XC,YC,X1,Y1, X2,Y2,.,P).