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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2007, 12:07   #1
Mickle
Пользователь
 
Регистрация: 27.03.2007
Сообщений: 37
Печаль Движение по окружности

Привет всем!
Мужики выручте
Используя компонент TShape и компонент TTimer как спомощь вот этого примера
var ang, //текущее положение в радианах
spd, //скорость (на сколько радиан передвигать каждый раз)
rad: Double; //радиус окружности
cx, cy, //координаты центра окр.
x, y: Integer; //текущие коорд. точки

procedure TForm1.Timer1_Timer(Sender: TObject);
begin
Canvas.Pixels[x, y]:=clBtnFace;
ang:=ang + spd;
x:=cx + Round(Cos(ang) * rad);
y:=cy + Round(Sin(ang) * rad);
Canvas.Pixels[x, y]:=clBlack;
end;
можно заставить один Shape вращатся вокруг Второго Shapa
используя Timer
Заранее благодарю
Mickle вне форума Ответить с цитированием
Старый 12.04.2007, 14:41   #2
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Определяем координаты оси вращения:
Код:
var k: integer;
if Shape1.Width>Shape1.Height then k:=Shape1.Width else k:=Shape1.Height;
cx:=Shape1.Left+Shape1.Width div 2;
cy:=Shape1.Top+Shape1.Height div 2;
k:=k div 2;
Процедура цикла вращения:
Код:
procedure TForm1.Timer1_Timer(Sender: TObject);
begin
 ang:=ang + spd;
 Shape2.Left:=cx + Round(Cos(ang) * k);
 Shape2.Top:=cy + Round(Sin(ang) * k);
end;
Visita Interiorem Terrae Rectificando Operae Lapidem...

Последний раз редактировалось Сильванович Михаил; 12.04.2007 в 18:02.
Сильванович Михаил вне форума Ответить с цитированием
Старый 12.04.2007, 21:31   #3
Mickle
Пользователь
 
Регистрация: 27.03.2007
Сообщений: 37
Хорошо Спасибо

Красавчик Михаил все получилось, а ты не мог бы подсказать как вот в этом примере сделать так чтобы Shape перемещался плавно, а то Shape через большой интервал перемещается
Procedure Dvij;
Begin
if Form1.Shape1.Width>Form1.Shape1.Hei ght then
k:=Form1.Shape1.Width
else
k:=Form1.Shape1.Height;
cx:=Form1.Shape1.Left+Form1.Shape1. Width div 2;
cy:=Form1.Shape1.Top+Form1.Shape1.H eight div 2;
//k:=k div 2;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Dvij;
ang:=ang + spd;
Shape2.Left:=cx + Round(Cos(ang) * k);
Shape2.Top:=cy + Round(Sin(ang) * k);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ang:=10;
spd:=50;
end;
end.
Я пока ещё новичек в программирование
Выручи!
Зарание Благодарен.
Mickle вне форума Ответить с цитированием
Старый 13.04.2007, 16:24   #4
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Ну, ты двинул!
Цитата:
spd:=50
Сам подумай, если угол исчисляется в радианах, то 50 приблизительно pi*16 (16*180 градусов - поворот за 1 раз). Т.е. бери spd:=0.15 и все будет "ок".
По поводу интервала - у TTimer есть свойство определяющее промежуток времени через который будет повторяться заданная
процедура - ставь 50-300 мс - и будет тебе счастье!
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
построение окружности по 3 точкам в Delphi ксона Помощь студентам 16 12.12.2009 17:14
Движение фигуры по окружности &RiU Помощь студентам 3 31.10.2009 20:39
Движение окружности и отрезка. Ev@ngel Компоненты Delphi 0 18.04.2008 22:16
Движение кнопки по окружности Инна Помощь студентам 10 22.04.2007 19:32
Анимация. Движение по окружности. Albenous Общие вопросы Delphi 1 11.04.2007 14:57