
30.10.2008, 19:34
|
Прохожий
|
|
Регистрация: 30.10.2008
Сообщения: 1
Репутация: 10
|
|
как закрасить 3-ех уголную пирамиду ?
Здравствуйте господа ! Подскажите пожалуйста как мне закрасить пирамиду - а точнее её стороны - т е треугольники, из которых она состоит ! объясните как это сделать и как сделать разными цветами ! если можно - то кодом !
вот сам код моей работы :
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
T3DPoint = record
x, y, z: Extended;
end;
TForm1 = class(TForm)
Puramud: TButton;
procedure PuramudClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i:integer;
teta, phi: real;
dx, dy:real;
w: array [1..8] of T3DPoint; //ìèðîâûå (world) êîîðäèíàòû âåðøèí
v: array [1..8] of TPoint; //âèäîâûå (view) êîîðäèíàòû âåðøèí
implementation
{$R *.dfm}
procedure Line(a: TPoint; b: TPoint);
begin
with form1.Canvas do
begin
moveto(a.X,a.Y);
lineto(b.X,b.Y);
end;
end;
procedure PuramudA(col:TColor);
begin
Form1.Canvas.Pen.Color:=col;
Line(v[2],v[7]);
Line(v[2],v[8]);
Line(v[6],v[8]);
Line(v[6],v[7]);
Line(v[7],v[8]);
Line(v[2],v[6]);
end;
procedure TForm1.PuramudClick(Sender: TObject);
begin
PuramudA(Form1.Color);
w[6].x := 100;
w[6].y := -100;
w[6].z := 100;
w[7].x := 100;
w[7].y := 100;
w[7].z := 100;
w[8].x := -100;
w[8].y := 100;
w[8].z := 100;
for i := 1 to 8 Do
begin
v[i].x := Round(
w[i].x*(-sin(teta)) +
w [i].y*( cos(teta))) + Form1.Width div 2;
v[i].y := Round(
w[i].x*(-cos(phi) * cos(teta)) -
w[i].y*( cos(phi) * sin(teta)) +
w[i].z*( sin(phi))) + Form1.Height div 3;
end;
PuramudA(clBlack);
teta:=teta+0.2;
phi:=phi+0.2;
end;
end.
|