Дърво на Питагор

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене

Дървото на Питагор (англ. Pythagoras tree) е равнинна фигура, построена от квадрати. Ако най-големият квадрат има големина 1x1, цялото дърво ще се събере в размери 6×4.

Построение[редактиране | edit source]

Започва се с квадрат. Върху него се построяват 2 квадрата, намалени в мащаб 1:½√2 и страни, сключващи прав ъгъл.Същата процедура се прилага рекурсивно до безкрайност.

Ptree1.JPG

Програма за построение[редактиране | edit source]

Program PythagorasTree; {version 6.0 } {GPLv3 2007 } {for turbo pascal 5.5}

uses CRT, Graph, DOS, turtle ;

 {$DEFINE SVGA}   { turn off for standard EGAVGA driver }
 {$IFDEF SVGA}
   {$I SVGA.INI}   { specific init file for SVGA driver }
 {$ENDIF}

Const

 huge = 5; {25,55}

Var

    Color                        : integer;
    StartX, StartY               : integer;
    ScreenWidth , ScreenHeight   : integer;
    alpha                        : byte;
    LineWidth,
    Length                       : byte;
    ch                           : char;

Procedure DrawSquare( Length : integer ); var i : Integer; Begin

 PenDown;
 For i := 1 to 4 do begin
   if i= 1 then SetPenColor(red) else SetPenColor(yellow);
   Forwd ( Length );
   TurnRight(90);
 end

End;

Procedure DrawPythagorasTree ( Length : integer ); Begin

 DrawSquare( Length );
 If Length > huge then begin
   Forwd( Length );
   TurnLeft(alpha);
   ch := readkey;
   DrawPythagorasTree(abs(round( Length * sin( pi*0.5-alpha*pi/180) )));
   TurnRight( 90 );
   Forwd(   abs(round( Length * sin(pi*0.5- alpha*pi/180) ) )) ;
   {desen katet}
   DrawPythagorasTree( abs(round(Length  * sin(alpha*pi/180)  )))  ;
   SetPenColor(white);
   Forwd( round(-Length * sin(pi*0.5-alpha*pi/180 )) );
   TurnLeft( 90-alpha );
   SetPenColor(green);
   Forwd( -Length );
 End;

End;

var grDriver,grMode,LowMode,HighMode : integer; Procedure Graf; Begin

 grDriver:=detect;
 grDriver := 9;
 grMode  :=1;
 writeln(detect);
 InitGraph(grDriver,grMode,'d:\usual\tp55\graf\');
 if GraphResult <> 0 then begin
   writeln ('error ', GraphErrorMsg(GraphResult),' ',GraphResult);
   Halt(1);
 end;
 GetModeRange(GrDriver, LowMode,HighMode);
 SetGraphMode(HighMode);

end;

Begin

 ClrScr;
 Length := 100;
 Graf;
 ScreenWidth  := 640; {1280}
 ScreenHeight := 480; {1024}
 InitTurtle;
 SetHeading( 0 );  {orientacia na kostenurkata}
 SetPenColor(yellow);
 Home;
 ShowTurtle;
 SetPosition( -length div 2 - 90 , - ScreenHeight  div 2 + 20);
 setcolor(blue);
 Line(0,0,639,0);Line(639,0,639,479);Line(639,479,0,479);Line(0,479,0,0);
 SetPenColor(yellow);
 alpha := 60;
 DrawPythagorasTree(Length);
 ch := readkey;
 CloseGraph;
 textmode(co80);
 writeln ('End.');

End.