Unit UFig;
interface
uses UCalc3D, UCalcVec, UGrafica;
{---------------------------------------------------------------}
procedure Cub(Sis: TReper; raz: integer);
procedure Icosaedru(Sis: TReper; raz: integer);
{---------------------------------------------------------------}
implementation
{---------------------------------------------------------------}
procedure Cub(Sis: TReper; raz: integer);
var P :array[0..7] of TVector;
    P2:array[0..7] of TVec2Real;
    V : TVector;
    i : integer;
begin
  {Amplasarea figurilor in spatiu (reper)}
  for i:=0 to 7 do begin
     if (i and 1) <> 0 then p[i][1] := raz else p[i][1] := -raz;
     if (i and 2) <> 0 then p[i][2] := raz else p[i][2] := -raz;
     if (i and 4) <> 0 then p[i][3] := raz else p[i][3] := -raz;
  end;

  {Calcularea coordonatelor plane - I metoda}
  for i:=0 to 7 do begin
     CoordAbsol(P[i], Sis, V);
     Proiec(V, P2[i]);
  end;

  {Desenarea segmentelor figurii}
  for i:=0 to 3 do begin
    Line2D(P2[i],   P2[i+4]);
    Line2D(P2[2*i], P2[2*i+1]);
    Line2D(P2[i+i and 2+2], P2[i+i and 2]);
  end;
end;
{---------------------------------------------------------------}
procedure Icosaedru(Sis: TReper; raz: integer);
var P :array[1..12] of TVector;
    P2:array[1..12] of TVec2Real;
    Im: TImReper; {Imaginea reperului 3D}
    u : real;
    i : integer;
begin
  u := 2*arctan(2/(sqrt(5)+1));

  {Amplasarea figurilor in spatiu (reper)}
  for i:=1 to 12 do begin
     P[i][1]:=0;    P[i][3]:=0;
  end;
  for i:=1 to 6  do p[i][2] := raz;
  for i:=7 to 12 do p[i][2] :=-raz;
  for i:=2 to 11 do RotAx(P[i], u,           3);
  for i:=2 to 6  do RotAx(P[i], r(72*i),     2);
  for i:=7 to 11 do RotAx(P[i], r(72*(i-3)), 2);

  {Proiectarea sistemului}
  ProiecReper(Sis, Im);

  {Calcularea coordonatelor plane - II metoda}
  for i:=1 to 12 do CoordAbsol2D(P[i], Im, P2[i]);

  {Desenarea segmentelor figurii}
  for i:=2 to 6  do Line2D(P2[1], P2[i]);
  for i:=7 to 11 do Line2D(P2[12],P2[i]);
  for I:=2 to 6 do begin
   Line2D(P2[i],  P2[(i-1)mod 5+2]);
   Line2D(P2[i+5],P2[(i-1)mod 5+7]);
   Line2D(P2[i],  P2[i+5]);
   Line2D(P2[i],  P2[(i-1)mod 5+7]);
  end;
end;
{---------------------------------------------------------------}

end.
