.


:




:

































 

 

 

 





Procedure

Tch_NiK(X Cg,YCg,Xg1,Yg1,Xg2,Yg2,Xs,Y s,X Tn,YTn,LD k);

¯

NOKO S NK NK. NOKO. NK NK.

NOS - SN - NS - SK - KS - SKO .. . , SN SK NOKO.

 

n(XTn,YTn) (XT,YT) e Tb. Tn k. Tn Te Tn Tb , Tb NOKO, SNe, Skb. , SNe, - SKb.

. 107 , -

NOKO.

NOKO. .

 

, .

, , S. S - NOKO c ().

n(XTn,YTn) NO Tk(XTk,YTk).

 

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;

 

 

, , . .

, (.108). , -

. 108 S1, S2 L, L- .

, .

 

:

Procedure Box_Otr;

var P, Ps:byte;

 

 

begin

Ps:=0; { }

Repeat

1- :

SledLine(g, 1, Nag, Xg1, Yg1, Xg2, Yg2, XCg, YCg),

TekUgol(Xg1, Yg1, Xg2, Yg2,Ug);

(Xm1,Ym1,Xm2,Ym2) :

DwaOtr(Xm1, Ym1,Um, Xg1, Yg1,Ug,XP,YP,P);

XP,YP :

if P=1 then PikOtr(XP,YP,Xm1,Ym1,Xm2,Ym2,P);

XP,YP :

if P=1 then PikOtr(XP,YP,Xg1,Yg1,Xg2,Yg2,P);

if P=1 then begin

Ps:=Ps+1; { }

Xs:=XP; Ys:=YP; { }

DlinaL(Xm1,Ym1,Xs,Ys,L); {

}

if L>0 then

e L:

StrokBox(e, Ps, L>, Xg1, Yg1, Xg2, Yg2, Xs, Ys);

end;

Until E=Nkg; { }

if Ps=0 then begin

Xm1,Ym1 :

Tch_Obl(Xm1,Ym1,X1,Y1,X2,Y2,P);

if P=1 then

o:

RisLineBox(o, 1, Nao, Xm1, Ym1, Xm2, Ym2, XCm, YCm);

end;

, , (Procedure FiltrOtr):

if Ps>0 then FiltrOtr;

end;

 

 

 

Procedure FiltrOtr; {

, , -

}

var Xm1s, Ym1s. Xk, Yk:Float;

begin

Xm1s:=Xm1; Ym1s:=Ymx; { }

:

if =1 then Hod:=2 else Hod:=1;

Repeat

1- , :

SledStrok(e, Ps, L>, Xg1, Yg1, Xg2, Yg2, Xs, Ys),

DlinaL(Xm1,Ym1,Xs,Ys,L); {

}

if L>0 theh begin

:

Tch_NiK(XCg,YCg,Xg1,Yg1,Xg2,Yg2,Xs,Ys,XTn,YTn,LDk);

TekUgol(Xm1, Ym1, Xm2, Ym2,Ug);

, . (Xm1,Ym1,Xs,Ys):

OtrDug(Xm1,Ym1,Um,Xs,Ys,Ri,XP1,YP1,XP2,YP2,P);

PikOtr(XP1,YP1,Xm1,Ym1,Xs,Ys,P);

if P=1 then begin

Xk:=XP1; Yk:=YP1;

end

else begin

Xk:=XP2; Yk:=YP2;

end;

:

DlinaD(Xs,Ys,XTn,YTn,Xk,Yk,Hod,LD);

if LD<LDk then { o}

RisLineBox(o, 1, Nao, Xm1, Ym1, Xs, Ys, XCo, YCo);

end;

Xm1:=Xs; Ym1:=Ys;

Until E=Nke; { }

 

 

:

DlinaL(Xm1,Ym1,Xm2,Ym2,L);

if L>0 then begin

, (Xm2, Ym2):

Tch_Obl(Xm2,Ym2,X1,Y1,X2,Y2,P);

if P=1 then { o}

RisLineBox(o, 1, Nao, Xm1, Ym1, Xm2, Ym2, XCo, YCo);

end;

X Y :

Xm1:=Xm1s; Ym1:=Ym1s;

end;

 

,

 

, , . .

NK (. 109). - S1, S2, S3, S4, S5

. 109 LD, LD - N S.

 

Procedure Box_Dug;{ }

var P, Pt, Ps:byte;

begin

Ps:=0; { }

Repeat

1- :

SledLine(g, 1, Nag, Xg1, Yg1, Xg2, Yg2, XCg, YCg),

TekUgol(Xg1, Yg1, Xg2, Yg2,Ug);

(XCm,YCm,Xm1,Ym1,Xm2,Ym2) :

 

 

OtrDug(Xg1,Yg1,Ug,XCm,YCm,R,XP1,YP1,XP2,YP2,Pt);

(XP1,YP1) :

if Pt=1 then PikOtr(XP1,YP1,Xg1,Yg1,Xg2,Yg2,P);

(XP1,YP1) :

if P=1 then

. PikDug(XP1,YP1,XCm,YCm,Xm1,Ym1,Xm2,Ym2,Nam,P);

if P=1 then begin

Ps:=Ps+1; { }

Xs:=XP1; Ys:=YP1; { }

S:

DlinaD(Xm,Ym,Xm1,Ym1,Xs,Ys,nam,LD);

if LD>0 then

LD:

StrokBox(e, Ps, LD>, Xg1, Yg1, Xg2, Yg2, Xs, Ys);

end;

2- (XP2,YP2) :

if Pt=1 then PikOtr(XP2,YP2,Xg1,Yg1,Xg2,Yg2,P);

(XP2,YP2) :

if P=1 then

. PikDug(XP2,YP2,XCm,YCm,Xm1,Ym1,Xm2,Ym2,Nam,P);

if P=1 then begin

Ps:=Ps+1; { }

Xs:=XP2; Ys:=YP2; { }

S:

DlinaD(XCm,YCm,Xm1,Ym1,Xs,Ys,nam,LD);

if LD>0 then

LD:

StrokBox(e, Ps, LD>, Xg1, Yg1, Xg2, Yg2, Xs, Ys);

end;

Until E=Nkg; { }

if Ps=0 then begin

(Xm1,Ym1)

Tch_Obl(Xm1,Ym1,X1,Y1,X2,Y2,P);

if P=1 then

{ }

 

 

RisLineBox(o, 2, Nam, Xm1, Ym1, Xm2, Ym2, XCm, YCm);

end;

,

, (Procedure FiltrDug):

if Ps>0 then FiltrDug;

end;

 

 

Procedure FiltrDug; { ,

}

var Xm1s, Ym1s:Float;

begin

Xm1s:=Xm1; Ym1s:=Ym1;

:

if =1 then Hod:=2 else Hod:=1;

Repeat

1- , :

SledStrok(e, Ps, LD>, Xg1, Yg1, Xg2, Yg2,Xs, Ys);

:

DlinaD(XCm,YCm,Xm1,Ym1,Xs,Ys,Nam,LD1);

if LD1>0 then begin

(XTn,YTn) LDk:

Tch_NiK(XCg,YCg,Xg1,Yg1,Ug,Xs,Ys,XTn,YTn,LDk);

:

DugDug(XCm,YCm,R,Xs,Ys,Ri,XP1,YP1,XP2,YP2,P);

{Ri - }

:

DlinaD(Xs,Ys,XTn,YTn,XP1,YP1,Hod,LD1);

DlinaD(Xs,Ys,XTn,YTn,XP2,YP2,Hod,LD2);

:

if LD1<LD2 then LD:=LD1 else LD:=LD2;

if LD<LDk then { o}

RisLineBox(, 2, Nam, Xm1, Ym1, Xs, Ys, XCm, YCm);

end;

Xm1:=Xs; Ym1:=Ys;

Until E=Nke;

:

 

Tch_Obl(Xm2,Ym2,X1,Y1,X2,Y2,P);

if P=1 theh

{ }

RisLineBox(, 2, Nam, Xs, Ys, Xm2, Ym2, XCm, YCm);

X Y :

Xm1:=Xm1s; Ym1:=Ym1s;

end;

 

 

Procedure Box_Lin;

{ }

var m, Em, Nam:byte; Xm1, Ym1, Xm2, Ym2, XCm, YCm:float;

{ }

var g, Eg, Nag:byte; Xg1, Yg1, Xg2, Yg2, XCg, YCg:float;

{ }

var o, Eo, Nao:byte; Xo1, Yo1, Xo2, Yo2, XCo, YCo:float;

{ L}

var e, N:byte; L>, Xe1, Ye1, Xe2, Ye2, XCe, YCe:float;

{ X Y}

var X1, Y1, X2, Y2:float;

{ }

var X, Y, U, Um, Ug, Uo, Us, Xs, Ys:float:

P, Pn, Pk, Ps, E, . :byte;

Nkm, Nko, Nke; Nkg:integer;

 

begin

Repeat

1- , .

SledLine(m, Em, Napr, Xm1, Ym1, Xm2, Ym2, XCm, YCm);

if Em=1 then Box_Otr; { - }

if Em=2 then Box_Dug; { - }

Until E=Nkm;

end;

 

2. (. 110).

:

 

X,Y.

 

2- :

- , ;

- .

, , , . , . . , .

 
 

. 110

Procedure Lin_Kontur;

, :

var Em, Nam: byte: Xm1, Ym1, Xm2, Ym2, XCm, YCm:float:

:

var Eo, Nao: byte: Xo1, Yo1, Xo2, Yo2, XCo, YCo:float:

var Et, Nat: byte; Xt1, Yt1, Xt2, Yt2, XCt, YCt:float;

:

var Xs, Ys, L, L1, Lmin, Li:float;

P, P1, P2, , :byte;

begin

Nach_Lin; { }

Och_Line; { }

end;

Procedure Nach_Lin; { }

var XA,YA,XB,YB:float;

Pd:byte;

begin

L:=0; Pd:=0;

Repeat

1- :

SledLine(Bx, El, Nag, Xm1, Ym1, Xm2, Ym2, XCm, YCm);

if Em=2 then begin { }

(O, YO) (, Y) :

TekUgol(XO,YO,XCm,YCm,U);

:

DlinaL(XCm,YCm,Xm1,Ym1,R);

:

OtrDug(XO,YO,U,XCm,YCm,R,XP1,YP1,XP2,YP2,P);

(XP1,YP1) :

PikDug(XP1,YP1,Xm1,Ym1,Xm2,Ym2,Nam,P1);

(XP1,YP1) :

PikOtr(XP1,YP1,X,Y,X,Y,P2);

if P1=1 and P2=1 then begin

XA:=XP1; YA:=YP1;

end

else begin

XA:=XP2; YA:=YP2;

end;

:

Xs:=XA; Ys:=YA;

:

DlinaL(X,Y,X,Y,L1);

end;

if Em=1 then begin { }

TekUgol(Xm1,Ym1,Xm2,Ym2,U);

:

DwaOtr(Xm1, Ym1,U, XO, YO,U+90,XP,YP,P);

XB:=XP; YB:=YP;

 

 

:

Xs:=XB; Ys:=YB;

:

DlinaL(X,Y,XB,YB,L1);

end;

Pd:=Pd+1; { }

1- :

if Pd=1 then begin

:

L:= L1;

:

Eo:=Em; XCo:=XCm; YCo:=YCm;

Xo1:=Xs; Yo1:=Ys; Xo2:=Xm2; Yo2:=Ym2;

end;

:

if Pd >1 and L>L1 then begin

L:= L1;

Eo:=Em; XCo:=XCm; YCo:=YCm;

Xo1:=Xs; Yo1:=Ys; Xo2:=Xm2; Yo2:=Ym2;

end;

Until E=Nkm;

Sopr_LL ( ) Sopr_LD ( ). :

Naprawl(XC,YC,Xn,Yn,Xk,Yk,) }

if Eo=1 then Sopr_LL(XC, YC, )

else Sopr_LD(XC, YC, );

S(Xs,Ys), S. .

RisLineBox(Bx, Em, Nam, Xm1, Ym1, Xs, Ys, XCm, YCm);

end;

Na a(Na,Ka) (. 111).

 

 

Nach_Lin (Xo1:=Xs; Yo1:=Ys; Xo2:=Xm2; Yo2:=Ym2).

S1, S2 , ( Na). DL.

 
 

S2 2 ( d ), LD. d S2 Kd. a Na S2 , .

. 111

 

d . . S2 - S3.

S3Kc, . , , KcS2.

,

 

 

Xs, Ys.

 

Procedure Och_Line; { }

var Xs1; Ys1, Lmin, Li:Float; Pd:byte;

begin

Pd:=0;

Repeat

SledLine(Bx, Em, Nam, Xm1, Ym1, Xm2, Ym2, XCm, YCm);

if Em=1 then TekUgol(Xm1, Ym1, Xm2, Ym2,Um);

if Em=2 then DlinaL(Xm1, Ym1, XCm, YCm,R);

if Eo=1 and Em=1 then O_O;

if Eo=1 and Em=2 then O_D;

if Eo=2 and Em=1 then D_O;

if Eo=2 and Em=2 then D_D;

:

RisLineBox(o, Eo, Nao, Xo1, Yo1, Xo2, Yo2, XCo, YCo);

:

Eo:=Et; Nao:=Nat;

Xo1:=Xt1; Yo1:=Yt1; Xo2:=Xt2; Yo2:=Yt2; XCo:=XCt; YCo:=YCt;

Until Xt2=Xs and Yt2=Ys;

:

RisLineBox(o, Et, Nat, Xt1, Yt1, Xt2, Yt2, XCt, YCt);

end;

 

- , -

Procedure O_O;

- o (o1,o2) - m (m1,m2).

Li < Lmin, m 2 m1 Pm2 (. 112).

, .

begin

Lmin , ( ):

 

 
 

. 112

 

if Pd=0 then DlinaL(Xo1,Yo1,Xo2,Yo2,Lmin); {Pd - P . , d =0}

TekUgol(Xo1,Yo1,Xo2,Yo2,Uo); { }

TekUgol(Xm1,Ym1,Xm2,Ym2,Um); { }

:

DwaOtr(Xm1, Ym1,Um, Xo1, Yo1,Uo,XP,YP,P);

:

if P=1 then PikOtr(XP,YP,Xm1,Ym1,Xm2,Ym2,P);

:

if P=1 then PikOtr(XP,YP,Xo1,Yo1,Xo2,Yo2,P);

{ P=1, }

if P=1 then begin

:

DlinaL(Xo1,Yo1,XP,YP,Li);

if Li > 0 and Li <= Lmin then begin

if Pd=0 then

LDk:

Tch_NiK(XCo,YCo,Xo1,Yo1,Xo2,Yo2,XP,YP,XTn,YTn,LDk);

:

DlinaL(XP,YP,Xm2,Ym2,L);

if L>0 then begin

Tk(XTk,YTk) (XP,YP.Xm2,Ym2):

OtrDug(XP,YP,Um,XP,YP,Ri,XP1,YP1,XP2,YP2,P);

PikOtr(XP1,YP1,XP,YP,Xm2,Ym2,P);

 

 

if P=1 then begin

XTk:=XP1; YTk:=YP1;

end

else begin

XTk:=XP2; YTk:=YP2;

end;

Tn Tk:

DlinaD(XP,YP,XTn,YTn,XTk,YTk,Hod,LD);

if LD<LDk then begin

, :

Et:=1; Xt1:=XP; Yt1:=YP; Xt2:=Xm2; Yt2:=Ym2;

, LDk Lmin:

Pd:=Pd+1; LDk:=LD; if Li<Lmin then Lmin:=Li;

end;

end;

:

DlinaL(XP,YP,Xm1,Ym1,L);

if L>0 then begin

Um, .. :

TekUgol(XP,YP,Xm1,Ym1,Um);

OtrDug(XP,YP,Um,XP,YP,Ri,XP1,YP1,XP2,YP2,P);

PikOtr(XP1,YP1,XP,YP,Xm1,Ym1,P);

if P=1 then begin

XTk:=XP1; YTk:=YP1;

end

else begin

XTk:=XP2; YTk:=YP2;

end;

DlinaD(XP,YP,XTn,YTn,XTk,YTk,Hod,LD);

if LD<LDk then begin

, :

Et:=1; Xt1:=XP; Yt1:=YP; Xt2:=Xm2; Yt2:=Ym2;

, LDk Lmin:

Pd:=Pd+1; LDk:=LD; if Li<Lmin then Lmin:=Li;

end;

end;

 

 

if Li<Lmin then

{ }

Xo2:=XP; Yo2:=YP;

end;

end;

end;

- , -

 

Procedure O_D;

- o (o1,o2) - m (m1,m2).

 
 

Li < Lmin, m 2 m1 Pm2 (. 113). , .

 

. 113

begin

Lmin ,

( ):

if Pd=0 then DlinaL(Xo1,Yo1,Xo2,Yo2,Lmin); {Pd - P . , d =0}

TekUgol(Xo1,Yo1,Xo2,Yo2,Uo); { }

DlinaL(Xm,YCm,Xm1,Ym1,R); { }

2 :

OtrDug(Xo1,Yo1,Uo,XCm,YCm,R,XP1,YP1,XP2,YP2,P);

1 :

 

if P=1 then PikOtr(XP1,YP1,Xo1,Yo1,Xo2,Yo2,P1);

1 :

if P1=1 then

PikDug(XP1,YP1,XCm,YCm,Xm1,Ym1,Xm2,Ym2,Nam,P2);

if P1=1 and P2=1 then P3=1 else P3=0;

2 :

PikOtr(XP2,YP2,Xo1,Yo1,Xo2,Yo2,P1);

2 :

if P1=1 then

PikDug(XP2,YP2,XCm,YCm,Xm1,Ym1,Xm2,Ym2,Nam,P2);

if P1=1 and P2=1 then P4=1 else P4=0;

{ P3=1 P4=1, . 3=1 4=1, , }

if P3=1 and P4=1 then begin

DlinaL(Xo1,Yo1,XP1,YP1,L1);

DlinaL(Xo1,Yo1,XP2,YP2,L2);

if L1<L2 then begin

XP:=XP1; YP:=YP1; Li:=L1;

end

else begin

XP:=XP2; YP:=YP2; Li:=L2;

end;

end;

if P3=1 and P4=0 then begin

XP:=XP1; YP:=YP1; Li:=L1;

end;

if P3=0 and P4=1 then begin

XP:=XP2; YP:=YP2; Li:=L2;

end;

if Li > 0 and Li <= Lmin then begin

if Pd=0 then

(XTn,YTn) LDk:

Tch_NiK(XCo,YCo,Xo1,Yo1,Xo2,Yo2,XP,YP,XTn,YTn,LDk);

:

DlinaD(XCm,YCm,XP,YP,Xm2,Ym2,Nam,LD);

if LD>0 then begin

(XTk,YTk) :

 

 

DugDug(XCm,YCm,R,XP,YP,Ri,XP1,YP1,XP2,YP2,P);

PikDug(XP1,YP1,XCm,YCm,XP,YP,Xm2,Ym2,Nam,P);

if P=1 then begin

XTk:=XP1; YTk:=YP1;

end

else begin

XTk:=XP2; YTk:=YP2;

end;

:

DlinaD(XP,YP,XTn,YTn,XTk,YTk,Hod,LD);

if LD<LDk then begin

, :

Et:=2; Xt1:=XP; Yt1:=YP; Xt2:=Xm2; Yt2:=Ym2;

XCt:=XCm; YCt:=YCm;

, LDk Lmin:

Pd:=Pd+1; LDk:=LD;

if Li<Lmin then begin

Lmin:=Li;

:

Xo2:=XP; Yo2:=YP;

end;

end;

end;

:

if Nam=1 then Nam:=2 else Nam:=1;

DlinaD(XCm,YCm,XP,YP,Xm1,Ym1,Nam,LD);

if LD>0 then begin

DugDug(XCm,YCm,R,XP,YP,Ri,XP1,YP1,XP2,YP2,P);

PikDug(XP1,YP1,XCm,YCm,XP,YP,Xm1,Ym1,Nam,P);

if P=1 then begin

XTk:=XP1; YTk:=YP1;

end

else begin

XTk:=XP2; YTk:=YP2;

end;

DlinaD(XP,YP,XTn,YTn,XTk,YTk,Hod,LD);

 

 

if LD<LDk then begin

Et:=2; Xt1:=XP; Yt1:=YP; Xt2:=Xm1; Yt2:=Ym1;

XCt:=XCm; YCt:=YCm;

, LDk Lmin:

Pd:=Pd+1; LDk:=LD;

if Li<Lmin then begin

Lmin:=Li;

:

Xo2:=XP; Yo2:=YP;

end;

end;

end;

end;

end;

 

- , -

 

Procedure D_O;

- o (o1,o2) - m (m1,m2).

Li < Lmin, m 2 m1 Pm2 (. 114). , .

 
 

. 114

begin

Lmin ,

( ):

 

if Pd=0 then DlinaD(XCo,YCo,Xo1,Yo1,Xo2,Yo2,Nao,Lmin);

{Pd - P .

, d =0}

TekUgol(Xm1,Ym1,Xm2,Ym2,Um); { }

DlinaL(Xo,YCo,Xo1,Yo1,R); { }

:

OtrDug(Xm1,Ym1,Um,XCo,YCo,R,XP1,YP1,XP2,YP2,P);

1 :

if P=1 then PikOtr(XP1,YP1,Xm1,Ym1,Xm2,Ym2,P1);

1 :

if P1=1 then

PikDug(XP1,YP1,XCo,YCo, Xo1,Yo1,Xo2,Yo2,Nao,P2);

if P1=1 and P2=1 then P3=1 else P3=0;

2 :

if P=1 then PikOtr(XP2,YP2,Xm1,Ym1,Xm2,Ym2,P1);

2 :

if P1=1 then

PikDug(XP2,YP2,XCo,YCo,Xo1,Yo1,Xo2,Yo2,Nao,P2);

if P1=1 and P2=1 then P4=1 else P4=0;

3=1 4=1, , :

if P3=1 and P4=1 then begin

DlinaD(XCo,YCo,Xo1,Yo1,XP1,YP1,Nao,L1);

DlinaD(XCo,YCo,Xo1,Yo1,XP2,YP2,Nao,L2);

if L1<L2 then begin

XP:=XP1; YP:=YP1; Li:=L1;

end

else begin

XP:=XP2; YP:=YP2; Li:=L2;

end;

end;

if P3=1 and P4=0 then begin

XP:=XP1; YP:=YP1; Li:=L1;

end;

if P3=0 and P4=1 then begin

XP:=XP2; YP:=YP2; Li:=L2;

end;

if Li > 0 and Li <= Lmin then begin

 

 

if Pd=0 then

(XTn,YTn) LDk:

Tch_NiK(XCo,YCo,Xo1,Yo1,Xo2,Yo2,XP,YP,XTn,YTn,LDk);

:

DlinaL(XP,YP,Xm2,Ym2,L);

if L>0 then begin

Tk(XTk,YTk) (XP,YP.Xm2,Ym2):

OtrDug(XP,YP,Um,XP,YP,Ri,XP1,YP1,XP2,YP2,P);

PikOtr(XP1,YP1,XP,YP,Xm2,Ym2,P);

if P=1 then begin

XTk:=XP1; YTk:=YP1;

end

else begin

XTk:=XP2; YTk:=YP2;

end;

Tn Tk:

DlinaD(XP,YP,XTn,YTn,XTk,YTk,Hod,LD);

if LD<LDk then begin

, :

Et:=1; Xt1:=XP; Yt1:=YP; Xt2:=Xm2; Yt2:=Ym2;

, LDk Lmin:

Pd:=Pd+1; LDk:=LD; if Li<Lmin then Lmin:=Li;

end;

end;

:

DlinaL(XP,YP,Xm1,Ym1,L);

if L>0 then begin

Um, .. :

TekUgol(XP,YP,Xm1,Ym1,Um);

OtrDug(XP,YP,Um,XP,YP,Ri,XP1,YP1,XP2,YP2,P);

PikOtr(XP1,YP1,XP,YP,Xm1,Ym1,P);

if P=1 then begin

XTk:=XP1; YTk:=YP1;

end

else begin

XTk:=XP2; YTk:=YP2;

end;

 

 

 

DlinaD(XP,YP,XTn,YTn,XTk,YTk,Hod,LD);

if LD<LDk then begin

, :

Et:=1; Xt1:=XP; Yt1:=YP; Xt2:=Xm2; Yt2:=Ym2;

, LDk Lmin:

Pd:=Pd+1; LDk:=LD; if Li<Lmin then Lmin:=Li;

end;

end;

if Li<Lmin then

{ }

Xo2:=XP; Yo2:=YP;

end;

end;

end;

 

Procedure D_D;

- o (o1,o2) - m (m1,m2).

Li < Lmin, m 2 m1 Pm2 (. 115). , .

 

 
 

. 115

begin

Lmin ,

( ):

 

 

if Pd=0 then DlinaD(XCo,YCo,Xo1,Yo1,Xo2,Yo2,Nao,Lmin);

{Pd - P . , d =0}

DlinaL(Xm,YCm,Xm1,Ym1,Rm); { }

DlinaL(Xo,YCo,Xo1,Yo1,R); { }

:

DugDug(XCm,YCm,Rm,XCo,YCo,R,XP1,YP1,XP2,YP2,P);

1 :

if P=1 then

PikDug(XP1,YP1,XCm,YCm,Xm1,Ym1,Xm2,Ym2,Nam,P1);

1 :

if P1=1 then

PikDug(XP1,YP1,XCo,YCo,Xo1,Yo1,Xo2,Yo2,Nao,P2);

if P1=1 and P2=1 then P3=1 else P3=0;

2 :

if P=1 then

PikOtr(XP2,YP2,XCm,YCm,Xm1,Ym1,Xm2,Ym2,P1);

2 :

if P1=1 then

PikDug(XP2,YP2,XCo,YCo,Xo1,Yo1,Xo2,Yo2,Nao,P2);

if P1=1 and P2=1 then P4=1 else P4=0;

3=1 4=1, , :

if P3=1 and P4=1 then begin

DlinaD(XCo,YCo,Xo1,Yo1,XP1,YP1,Nao,L1);

DlinaD(XCo,YCo,Xo1,Yo1,XP2,YP2,Nao,L2);

if L1<L2 then begin

XP:=XP1; YP:=YP1; Li:=L1;

end

else begin

XP:=XP2; YP:=YP2; Li:=L2;

end;

end;

if P3=1 and P4=0 then begin

XP:=XP1; YP:=YP1; Li:=L1;

end;

if P3=0 and P4=1 then begin

XP:=XP2; YP:=YP2; Li:=L2;

end;

 

if Li > 0 and Li <= Lmin then begin

if Pd=0 then

(XTn,YTn) LDk:

Tch_NiK(XCo,YCo,Xo1,Yo1,Xo2,Yo2,XP,YP,XTn,YTn,LDk);

:

DlinaD(XCm,YCm,XP,YP,Xm2,Ym2,Nam,LD);

if LD>0 then begin

(XTk,YTk) :

DugDug(XCm,YCm,R,XP,YP,Ri,XP1,YP1,XP2,YP2,P);

PikDug(XP1,YP1,XCm,YCm,XP,YP,Xm2,Ym2,Nam,P);

if P=1 then begin

XTk:=XP1; YTk:=YP1;

end

else begin

XTk:=XP2; YTk:=YP2;

end;

:

DlinaD(XP,YP,XTn,YTn,XTk,YTk,Hod,LD);

if LD<LDk then begin

, :

Et:=2; Xt1:=XP; Yt1:=YP;

Xt2:=Xm2; Yt2:=Ym2;

XCt:=XCm; YCt:=YCm;

, LDk Lmin:

Pd:=Pd+1; LDk:=LD;

if Li<Lmin then begin

Lmin:=Li;

:

Xo2:=XP; Yo2:=YP;

end;

end;

end;

:

if Nam=1 then Nam:=2 else Nam:=1;

DlinaD(XCm,YCm,XP,YP,Xm1,Ym1,Nam,LD);

if LD>0 then begin

DugDug(XCm,YCm,R,XP,YP,Ri,XP1,YP1,XP2,YP2,P);

 

 

PikDug(XP1,YP1,XCm,YCm,XP,YP,Xm1,Ym1,Nam,P);

if P=1 then begin

XTk:=XP1; YTk:=YP1;

end

else begin

XTk:=XP2; YTk:=YP2;

end;

DlinaD(XP,YP,XTn,YTn,XTk,YTk,Hod,LD);

if LD<LDk then begin

Et:=2; Xt1:=XP; Yt1:=YP; Xt2:=Xm1; Yt2:=Ym1;

XCt:=XCm; YCt:=YCm;

, LDk Lmin:

Pd:=Pd+1; LDk:=LD;

if Li<Lmin then begin

Lmin:=Li;

:

Xo2:=XP; Yo2:=YP;

end;

end;

end;

end;

end;

3. (. 116).

:

- , , -

;

- (X,Y,Z), ;

- a b;

- S(X,Y,Z).

.

.

:

.

 

 
 

. 116

 

Procedure El_Pw(El,Pw:tekst; var X[N],Y[N],Z[N]:float; P:byte);

 

begin

S AB:

PikOtr(XS2, ZS2, XA2, ZA2, XB2, ZB2, P1);

PikOtr(XS1, YS1, XA1, YA1, XB1, YB1, P2);

if P1=1 and P2=1 then begin

P:=1; { }

K = S -

XK:= XS; YK:= YS; ZK:= S;

, .

else begin

S(S, AB) D(r),

r - .

 

2- (N(X,Y,Z) M(X,Y,Z)), 2- S(S, AB) D(r). , D(r) j <> 0.

S .

TekUgol(XA2,ZA2,XB2,ZB2,UAB2);

TekUgol(XA1,ZA1,XB1,YB1,UAB1);

TekUgol(XO2,ZO2,XT2,ZT2,UOT2);

DwaOtr(XA2,ZA2,UAB2,XS2,ZS2,130,XF2,ZF2,P5);

DwaOtr(XA1,YA1,UAB1,XF2,ZF2, 90,XF1,YF1,P5);

{ SF - S(S, AB) }

TekUgol(XS1,YS1,XF1,YF1,USF1);

DwaOtr(XS2,ZS2,130, XO2,ZO2,UOT2 ,XN2,ZN2,P5);

DwaOtr(XS1,YS1, USF1, XN2,ZN2,90,XN1,YN1,P5);

{N(N1,N2) - SF

}

DwaOtr(XA2,ZA2,UAB2, XO2,ZO2,UOT2 ,XM2,ZM2,P3);

if P3=1 then begin

DwaOtr(XA1,YA1,UAB1,XM2,ZM2,90,XM1,YM1,P5);

{(M1,M2) - AB

}

PikOtr(XM2, ZM2, XR2, ZR2,XT2, ZT2, P4);

if P4=1 then

OtrDug(XA1,YA1,UAB1,XO1,YO1,R,XH1,YH1,XL2,YL2,P4);

if P4=1 then PikOtr(XM1, YM1, XH1, YH1,XL1, YL1, P4);

{ P4=1,

. :

Tch_Obl(X,Y,X1,Y1,X2,Y2,P)}

end

else begin

{ AB }

DwaOtr(XA2,ZA2,UAB2,XS2,ZS2,60,XG2,ZG2,P5);

DwaOtr(XA1,YA1,UAB1,XG2,ZG2, 90,XG1,YG1,P5);

{ SG - S(S, AB) }

TekUgol(XS1,YS1,XG1,YG1,USG1);

DwaOtr(XS2,ZS2,60, XO2,ZO2,UOT2 ,XM2,ZM2,P5);

DwaOtr(XS1,YS1, USG1, XM2,ZM2,90,XM1,YM1,P5);

 

 

{(M1,M2) - SG

}

end;

if P1=1 and P2=1 and P4=1 then begin

P:=1; { }

XK:=XM2; YK:=YM1; ZK:=ZM2;

{

=}

end

else begin

TekUgol(XM1,YM1,XN1,YN1,UMN1);

OtrDug(XM1,YM1,UMN1,XS1,YS1,R,XC1,YC1,XE2,YE2,P5);

if P5=0 then P:=0 { }

else begin

TekUgol(XS1,YS1,XC1,YC1,USC1);

DwaOtr(XS1,YS1, USC1, XA1,YA1,UAB1 ,XK1,YK1,P5);

DwaOtr(XA2,ZA2,UAB2, XK1,YK1,90,XK2,ZK2,P5);

if (XC1-XE1<0.05 and (YC2-YE2)<0.05 then begin

P:=1; { K(XK1,YK1,ZK2}

end

else begin

TekUgol(XS1,YS1,XE1,YE1,USE1);

DwaOtr(XS1,YS1, USE1, XA1,YA1,UAB1 ,XD1,YD1,P5);

DwaOtr(XA2,ZA2,UAB2, XK1,YK1,90,XD2,ZD2,P5);

P:=1; {

K(XK1,YK1,ZK2); D(XD1,YD1,ZD2}

end;

end;

end;

end;

 

.23. ( ), , , , .

 

 

.

 





:


: 2016-11-18; !; : 474 |


:

:

.
==> ...

1500 - | 1333 -


© 2015-2024 lektsii.org - -

: 0.58 .