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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2011, 14:19   #1
ironbeef
Новичок
Джуниор
 
Регистрация: 27.04.2011
Сообщений: 2
Вопрос Движение линии по окружности

доброго всем времени суток! Очень нужна помощь с прогой.
Нужно что бы по таймеру в пределах окружности определенного радиуса двигалась прямая.
Т.е. 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



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 28.04.2011 в 12:31.
ironbeef вне форума Ответить с цитированием
Старый 27.04.2011, 14:57   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
m:=Round(180/n); //перевод в радианы
На то есть ф-ция DegToRad();

m := DegToRad(n);
..
x:=Round(x0+R*Cos(m)); //параметр ф-ции Cos - в радианах !!
y:=Round(y0+R*Sin(m)); //тоже самое !!

Цитата:
как очистить экран от предыдущих canvas'ов?
Form1.Canvas.FillRect(Form1.ClientR ect);
mss вне форума Ответить с цитированием
Старый 28.04.2011, 12:52   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
И еще вопрос - как очистить экран от предыдущих canvas'ов?
к радикальному и простому решению mss
могу добавить ещё:
обычно анимацию производят следующим образом.
выводят объект по координатам X,Y
выжидают паузу.
стирают объект по координатам X,Y (например, выводят тот же объект, но цветом формы.
Изменяют координаты X,Y (по нужному закону движения)
переход на начало цикла.

в случае использования процедуры на таймере вначале стирайте объект.
потом изменяйте X,Y
потом выводите (прорисовывайте) объект.


p.s. а анимация прикольная
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.05.2011, 15:16   #4
ironbeef
Новичок
Джуниор
 
Регистрация: 27.04.2011
Сообщений: 2
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
На то есть ф-ция DegToRad();
Спасибо!!!!! не знал
ironbeef вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И опять движение по окружности !) Weyner Помощь студентам 2 23.10.2010 22:09
Движение точки по окружности somwan Общие вопросы C/C++ 4 17.03.2009 16:30
движение окружности по окружности MyQwErTy Помощь студентам 13 04.11.2008 22:52
Движение окружности Ensoph Помощь студентам 4 25.09.2008 12:11
Движение по окружности Mickle Общие вопросы Delphi 3 13.04.2007 16:24