|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Движение линии по окружности
доброго всем времени суток! Очень нужна помощь с прогой.
Нужно что бы по таймеру в пределах окружности определенного радиуса двигалась прямая. Т.е. x0,y0 (центр окружности) - были бы статичным, а x,y (координаты на окружности) - изменялись бы в завиимости от градуса (На примере - третье звено). Начальное значение - 45 градусов. Вот код. посмотрите пожалуйста, где зафэлил. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Timer1: TTimer; Edit1: TEdit; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private public end; var Form1: TForm1; n: real; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); //интервал таймера 300ms var R: integer; x: integer; y: integer; x0: integer; y0: integer; m: integer; begin R:=100; //радиус n:=n+1; //значение градусов по таймеру увеличиватся на 1 m:=Round(180/n); //перевод в радианы x0:=200; //координата x центра y0:=200; //координата y центра x:=Round(x0+R*Cos(pi/m)); //параметрическое уравнение для x y:=Round(y0+R*Sin(pi/m)); //параметрическое уравнение для y Form1.Canvas.MoveTo(x0, y0); //центр окружности Form1.Canvas.LineTo(X, Y); //координаты x,y (докуда рисовать линию) Edit1.Text:=FloatToStr(n)+' °'; //текущее значение градусов end; procedure TForm1.FormCreate(Sender: TObject); begin n:=45; //начальное значение 45 градусов end; И еще вопрос - как очистить экран от предыдущих canvas'ов? Заранее всем спасибо. Вот пример - http://i065.radikal.ru/1104/56/3ddff0c969a7.jpg Последний раз редактировалось Admin, 27.04.2011 в 15:26. |
#2
|
||||
|
||||
Подправил:
Код:
procedure TForm1.Timer1Timer(Sender: TObject); var R: integer; x: integer; y: integer; x0: integer; y0: integer; begin Form1.Canvas.Rectangle(x0-R,y0-R,x0+R,y0+R); R:=100; n:=n+1; x0:=200; y0:=200; x:=Round(x0+R*Cos((pi/180)*n)); y:=Round(y0+R*Sin((pi/180)*n)); Form1.Canvas.MoveTo(x0, y0); Form1.Canvas.LineTo(X, Y); Edit1.Text:=FloatToStr(n)+' °'; if n = 360 Then n:= 0; end; If end Then begin; |