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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2013, 08:39   #1
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
Вопрос Timer.Canvas[Delphi]

Как сделать по третьей кнопке серию поворотов из 10 раз?
как еще можно усовершенствоваь программу?

Код:
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;
    Image2: TImage;
    Image3: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Timer1: TTimer;
    Button3: TButton;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure draw;
    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
//    procedure Timer1Timer(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 Tform1.draw;
begin
  for i:=1 to n do begin
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.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.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 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[5].x:=-10;
  mas[6].x:=-1;
  mas[7].x:=-0.5;
  mas[8].x:=-5;
  mas[9].x:=0;
  mas[10].x:=5;
  mas[11].x:=0.5;
  mas[12].x:=1;
  mas[13].x:=10;
  mas[14].x:=9;
  mas[15].x:=1;
  mas[16].x:=1;
  mas[17].x:=0;
  mas[18].x:=0;
  mas[19].x:=0;
  mas[20].x:=0;
  mas[21].x:=0;
  mas[22].x:=0;
  mas[23].x:=0;
  mas[24].x:=0;
  mas[25].x:=0;


  mas[1].y:=10;
  mas[2].y:=7;
  mas[3].y:=1;
  mas[4].y:=-1;
  mas[5].y:=-2;
  mas[6].y:=-1;
  mas[7].y:=-6;
  mas[8].y:=-8;
  mas[9].y:=-7;
  mas[10].y:=-8;
  mas[11].y:=-6;
  mas[12].y:=-1;
  mas[13].y:=-2;
  mas[14].y:=-1;
  mas[15].y:=1;
  mas[16].y:=7;
  mas[17].y:=10;
  mas[18].y:=6;
  mas[19].y:=-6;
  mas[20].y:=-8;
  mas[21].y:=-9;
  mas[22].y:=-7;
  mas[23].y:=-5;
  mas[24].y:=7;
  mas[25].y:=10;

  mas[1].z:=0;
  mas[2].z:=0;
  mas[3].z:=0;
  mas[4].z:=0;
  mas[5].z:=0;
  mas[6].z:=0;
  mas[7].z:=0;
  mas[8].z:=0;
  mas[9].z:=0;
  mas[10].z:=0;
  mas[11].z:=0;
  mas[12].z:=0;
  mas[13].z:=0;
  mas[14].z:=0;
  mas[15].z:=0;
  mas[16].z:=0;
  mas[17].z:=0;
  mas[18].z:=1;
  mas[19].z:=1;
  mas[20].z:=3;
  mas[21].z:=3;
  mas[22].z:=0;
  mas[23].z:=-1;
  mas[24].z:=-1;
  mas[25].z:=0;
Image1.Canvas.pen.Color :=clBlack;
Image2.Canvas.pen.Color :=clBlack;
Image3.Canvas.pen.Color :=clBlack;
draw;
Timer1.Interval:=10;
 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;

Image1.Canvas.pen.Color :=clWhite;
Image2.Canvas.pen.Color :=clWhite;
Image3.Canvas.pen.Color :=clWhite;
draw;
 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);    // êðåí
  end;
Image1.Canvas.pen.Color :=clBlack;
Image2.Canvas.pen.Color :=clBlack;
Image3.Canvas.pen.Color :=clBlack;
draw;

//Memo1.Lines.Add(FloatToStr(mas[i].x) + '   ' +  FloatToStr(mas[i].y)+ '   ' +  FloatToStr(mas[i].z));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled :=True;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image1.Canvas.pen.Color :=clBlack;
Image2.Canvas.pen.Color :=clBlack;
Image3.Canvas.pen.Color :=clBlack;
draw;
end;

end.
MariaD вне форума Ответить с цитированием
Старый 17.06.2013, 10:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Задача какая?
Рисовать фиг. и поворачивать ее вокруг оси?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2013, 10:36   #3
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
По умолчанию

да.один поворот у меня работает.сделала еще одну кнопку и по ней надо сделать 10 поворотов циклически
MariaD вне форума Ответить с цитированием
Старый 17.06.2013, 11:51   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Перед запуском таймера обнулить счетчик. В таймере после Draw нарастить его на 1. Если стал равен 10, то отключить таймер Timer1.Enabled :=False;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.06.2013, 12:01   #5
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
По умолчанию

бесконечно вращает
Код:
procedure Tform1.draw;
begin
  for i:=1 to n do begin
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.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.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 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[5].x:=-10;
  mas[6].x:=-1;
  mas[7].x:=-0.5;
  mas[8].x:=-5;
  mas[9].x:=0;
  mas[10].x:=5;
  mas[11].x:=0.5;
  mas[12].x:=1;
  mas[13].x:=10;
  mas[14].x:=9;
  mas[15].x:=1;
  mas[16].x:=1;
  mas[17].x:=0;
  mas[18].x:=0;
  mas[19].x:=0;
  mas[20].x:=0;
  mas[21].x:=0;
  mas[22].x:=0;
  mas[23].x:=0;
  mas[24].x:=0;
  mas[25].x:=0;


  mas[1].y:=10;
  mas[2].y:=7;
  mas[3].y:=1;
  mas[4].y:=-1;
  mas[5].y:=-2;
  mas[6].y:=-1;
  mas[7].y:=-6;
  mas[8].y:=-8;
  mas[9].y:=-7;
  mas[10].y:=-8;
  mas[11].y:=-6;
  mas[12].y:=-1;
  mas[13].y:=-2;
  mas[14].y:=-1;
  mas[15].y:=1;
  mas[16].y:=7;
  mas[17].y:=10;
  mas[18].y:=6;
  mas[19].y:=-6;
  mas[20].y:=-8;
  mas[21].y:=-9;
  mas[22].y:=-7;
  mas[23].y:=-5;
  mas[24].y:=7;
  mas[25].y:=10;

  mas[1].z:=0;
  mas[2].z:=0;
  mas[3].z:=0;
  mas[4].z:=0;
  mas[5].z:=0;
  mas[6].z:=0;
  mas[7].z:=0;
  mas[8].z:=0;
  mas[9].z:=0;
  mas[10].z:=0;
  mas[11].z:=0;
  mas[12].z:=0;
  mas[13].z:=0;
  mas[14].z:=0;
  mas[15].z:=0;
  mas[16].z:=0;
  mas[17].z:=0;
  mas[18].z:=1;
  mas[19].z:=1;
  mas[20].z:=3;
  mas[21].z:=3;
  mas[22].z:=0;
  mas[23].z:=-1;
  mas[24].z:=-1;
  mas[25].z:=0;
Image1.Canvas.pen.Color :=clBlack;
Image2.Canvas.pen.Color :=clBlack;
Image3.Canvas.pen.Color :=clBlack;
draw;
Timer1.Interval:=200;
 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;

Image1.Canvas.pen.Color :=clWhite;
Image2.Canvas.pen.Color :=clWhite;
Image3.Canvas.pen.Color :=clWhite;
draw;
 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);    // êðåí
  end;
Image1.Canvas.pen.Color :=clBlack;
Image2.Canvas.pen.Color :=clBlack;
Image3.Canvas.pen.Color :=clBlack;
draw;

//Memo1.Lines.Add(FloatToStr(mas[i].x) + '   ' +  FloatToStr(mas[i].y)+ '   ' +  FloatToStr(mas[i].z));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled :=True;
end;


procedure TForm1.Timer1Timer(Sender: TObject);

var tan,ris,kren:real;  j:integer;
begin
 j:=1;

tan:=StrToFloat(Edit1.Text)*pi180;
ris:=StrToFloat(Edit2.Text)*pi180;
kren:=StrToFloat(Edit3.Text)*pi180;
Image1.Canvas.pen.Color :=clWhite;
Image2.Canvas.pen.Color :=clWhite;
Image3.Canvas.pen.Color :=clWhite;
draw;
 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);    // êðåí
  end;
Image1.Canvas.pen.Color :=clBlack;
Image2.Canvas.pen.Color :=clBlack;
Image3.Canvas.pen.Color :=clBlack;
draw;   j:=j+1;
if j=3 then Timer1.Enabled :=False;
end;

end.
MariaD вне форума Ответить с цитированием
Старый 17.06.2013, 12:08   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var jjj: Integer;

procedure TForm1.Button3Click(Sender: TObject);
begin
  jjj:=0;
  Button3.Enabled:=False;
  Timer1.Enabled :=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Image1.Canvas.pen.Color :=clBlack;
  Image2.Canvas.pen.Color :=clBlack;
  Image3.Canvas.pen.Color :=clBlack;
  draw;
  Inc(jjj);
  if jjj=10 then Timer1.Enabled :=False;
  Button3.Enabled:=not Timer1.Enabled;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 17.06.2013 в 12:10.
Аватар вне форума Ответить с цитированием
Старый 17.06.2013, 12:15   #7
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
По умолчанию

все равно бесконечно
MariaD вне форума Ответить с цитированием
Старый 17.06.2013, 12:46   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
mas:array[1..n] of pointXYZ;
Что тут n делает и чему равно?
Код:
Timer1.Interval:=10;
Что за интервал такой (0.01 сек)?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 17.06.2013 в 12:48.
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi.Canvas MariaD Помощь студентам 3 27.03.2013 23:54
timer delphi Игopь Компоненты Delphi 1 24.02.2013 09:05
delphi и время (Timer) arthur1 Общие вопросы Delphi 12 14.09.2011 22:54
Canvas в Delphi Claster Помощь студентам 1 10.05.2011 16:29
Timer в Canvas Mazepa Помощь студентам 6 05.02.2010 11:06