опроцедурить рисование, рисует 2 раза черным один раз белым, в 3 разных image. и как можно еще улучшить программу?
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls,Unit2, ComCtrls;
type
pointXYZ=record
x:real;
y:real;
z:real;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Image1: TImage;
Memo1: TMemo;
Image2: TImage;
Image3: TImage;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const n=25; pi180=pi/180;
var
i:integer;
Form1: TForm1;
mas:array[1..n] of pointXYZ;
implementation
{$R *.dfm}
procedure povorot(ugol:real; var a1,a2:real);
var a3:real;
begin
a3:=a1*cos(ugol)-a2*sin(ugol);
a2:=a1*sin(ugol)+a2*cos(ugol);
a1:=a3;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
mas[1].x:=0;
mas[2].x:=-1;
mas[3].x:=-1;
mas[4].x:=-9;
mas[1].y:=10;
mas[2].y:=7;
mas[3].y:=1;
mas[4].y:=-1;
mas[1].z:=0;
mas[2].z:=0;
mas[3].z:=0;
mas[4].z:=0;
for i:=1 to n do begin
Image1.Canvas.pen.Color :=clBlack;
Image1.Canvas.MoveTo(Image1.Width div 2,Image1.Height div 2);
if i<>1 then
Image1.canvas.moveto(Trunc(mas[i-1].y*5+Image1.Width div 2),Trunc(mas[i-1].z*5+Image1.Height div 2));
Image1.Canvas.LineTo(Trunc(mas[i].y*5+Image1.Width div 2),Trunc(mas[i].z*5+Image1.Height div 2));
Image2.Canvas.pen.Color :=clBlack;
Image2.Canvas.MoveTo(Image2.Width div 2,Image2.Height div 2);
if i<>1 then
Image2.canvas.moveto(Trunc(mas[i-1].x*5+Image2.Width div 2),Trunc(mas[i-1].z*5+Image2.Height div 2));
Image2.Canvas.LineTo(Trunc(mas[i].x*5+Image2.Width div 2),Trunc(mas[i].z*5+Image2.Height div 2));
Image3.Canvas.pen.Color :=clBlack;
Image3.Canvas.MoveTo(Image3.Width div 2,Image3.Height div 2);
if i<>1 then
Image3.canvas.moveto(Trunc(mas[i-1].y*5+Image3.Width div 2),Trunc(mas[i-1].x*5+Image3.Height div 2));
Image3.Canvas.LineTo(Trunc(mas[i].y*5+Image3.Width div 2),Trunc(mas[i].x*5+Image3.Height div 2));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var tan,ris,kren:real;
begin
tan:=StrToFloat(Edit1.Text)*pi180;
ris:=StrToFloat(Edit2.Text)*pi180;
kren:=StrToFloat(Edit3.Text)*pi180;
for i:=1 to n do begin
Image1.Canvas.pen.Color :=clWhite;
Image1.Canvas.MoveTo(Image1.Width div 2,Image1.Height div 2);
if i<>1 then
Image1.canvas.moveto(Trunc(mas[i-1].y*5+Image1.Width div 2),Trunc(mas[i-1].z*5+Image1.Height div 2));
Image1.Canvas.LineTo(Trunc(mas[i].y*5+Image1.Width div 2),Trunc(mas[i].z*5+Image1.Height div 2));
Image2.Canvas.pen.Color :=clWhite;
Image2.Canvas.MoveTo(Image2.Width div 2,Image2.Height div 2);
if i<>1 then
Image2.canvas.moveto(Trunc(mas[i-1].x*5+Image2.Width div 2),Trunc(mas[i-1].z*5+Image2.Height div 2));
Image2.Canvas.LineTo(Trunc(mas[i].x*5+Image2.Width div 2),Trunc(mas[i].z*5+Image2.Height div 2));
Image3.Canvas.pen.Color :=clWhite;
Image3.Canvas.MoveTo(Image3.Width div 2,Image3.Height div 2);
if i<>1 then
Image3.canvas.moveto(Trunc(mas[i-1].y*5+Image3.Width div 2),Trunc(mas[i-1].x*5+Image3.Height div 2));
Image3.Canvas.LineTo(Trunc(mas[i].y*5+Image3.Width div 2),Trunc(mas[i].x*5+Image3.Height div 2));
end;
for i:=1 to n do begin
povorot(tan, mas[i].y, mas[i].z); //тангаж
povorot(ris, mas[i].x, mas[i].z); //рысканье
povorot(kren, mas[i].x, mas[i].y); // крен
Image1.Canvas.pen.Color :=clBlack;
Image1.Canvas.MoveTo(Image1.Width div 2,Image1.Height div 2);
if i<>1 then
Image1.canvas.moveto(Trunc(mas[i-1].y*5+Image1.Width div 2),Trunc(mas[i-1].z*5+Image1.Height div 2));
Image1.Canvas.LineTo(Trunc(mas[i].y*5+Image1.Width div 2),Trunc(mas[i].z*5+Image1.Height div 2));
Image2.Canvas.pen.Color :=clBlack;
Image2.Canvas.MoveTo(Image2.Width div 2,Image2.Height div 2);
if i<>1 then
Image2.canvas.moveto(Trunc(mas[i-1].x*5+Image2.Width div 2),Trunc(mas[i-1].z*5+Image2.Height div 2));
Image2.Canvas.LineTo(Trunc(mas[i].x*5+Image2.Width div 2),Trunc(mas[i].z*5+Image2.Height div 2));
Image3.Canvas.pen.Color :=clBlack;
Image3.Canvas.MoveTo(Image3.Width div 2,Image3.Height div 2);
if i<>1 then
Image3.canvas.moveto(Trunc(mas[i-1].y*5+Image3.Width div 2),Trunc(mas[i-1].x*5+Image3.Height div 2));
Image3.Canvas.LineTo(Trunc(mas[i].y*5+Image3.Width div 2),Trunc(mas[i].x*5+Image3.Height div 2));
Memo1.Lines.Add(FloatToStr(mas[i].x) + ' ' + FloatToStr(mas[i].y)+ ' ' + FloatToStr(mas[i].z));
end;
end;
end.