Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2013, 13:27   #1
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
Вопрос Как опроцедурить код?[Delphi]

опроцедурить рисование, рисует 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.
MariaD вне форума Ответить с цитированием
Старый 06.06.2013, 13:33   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
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));
вынести в отдельную процедуру с параметрами Timage и TColor; и код сократиться минимум в 4 раза
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 06.06.2013, 14:02   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Не успел
Вложения
Тип файла: zip 3D деталька.zip (10.2 Кб, 6 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить код HTM в DELPHI rosljk Работа с сетью в Delphi 12 30.04.2012 20:46
Как можно вставить код C++ в Delphi 7 Владислав Общие вопросы Delphi 7 20.03.2012 20:05
как переделать код delphi на php delphihelp Помощь студентам 1 17.03.2012 11:34
Как оптимизировать код Delphi OST_K Помощь студентам 1 30.05.2010 06:59
как написать код на delphi =( Ане4ка Помощь студентам 1 15.05.2010 17:04