Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 25

Анимация

15.10.2013, 18:51. Показов 835. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается сделать правильную анимацию. Задача: треугольник должен вращаться вокруг своей вершины.
Вот что я попробовал но не получилось:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  x2,y2,a,x,y,x1,y1:integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if timer1.Enabled=false then timer1.Enabled:=true
else timer1.Enabled:=false;
end;
 
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
x:=form1.ClientWidth div 2;
y:=300;
x1:=form1.ClientWidth-400;
y1:=(form1.ClientHeight div 2)+100;
x2:=400;
y2:=(form1.ClientHeight div 2)+100;
a:=1;
 
end;
 
procedure risunok;
begin
form1.Canvas.Polygon([point(x,y),point(x1,y1),point(x2,y2)]);
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
risunok;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Canvas.Pen.Color:=clBtnFace;
risunok;
x:=round(644+100*sin(a));
y:=round(300-100*(1-cos(a)));
x1:=round(889+100*sin(a));
y1:=round(418-100*(1-cos(a)));
x2:=round(400+100*sin(a));
y2:=round(418-100*(1-cos(a)));
inc(a,1);
Form1.Canvas.Pen.Color:=clblack;
risunok;
end;
 
end.
Расчёт движения точки по формуле:

x=x0+r*sin(a)
y=y0-r(1-cos(a))
x0, y0-начальные координаты точки,а-угол поворота(делается в цикле инкрементом по 1), r-радиус
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2013, 18:51
Ответы с готовыми решениями:

анимация
хотелось бы узнать, как сделать последовательную смену картинок т.е анимация за счет быстрой смены изображений Добавлено через 11...

Анимация
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type...

Анимация
Почему пишет ошибку в nomer unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

3
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
15.10.2013, 19:26
x0, y0 - это координаты центра, относительно которого происходит вращение.
а - угол поворота - задается в радианах.
0
Я не экстрасенс
 Аватар для barbudo59
382 / 339 / 34
Регистрация: 22.01.2013
Сообщений: 1,126
15.10.2013, 19:54
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Math;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  x,y,x1,y1,x2,y2:integer;
  r1,r2,a1,a2: real;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if timer1.Enabled=false then
    timer1.Enabled:=true
  else timer1.Enabled:=false;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
x:=form1.ClientWidth div 2;
y:=form1.ClientHeight div 2;
x1:=x-200;
y1:=y+100;
x2:=x+100;
y2:=y+200;
 
r1:=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
r2:=sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y));
a1:=arcsin((x1-x)/r1);
a2:=arcsin((x2-x)/r2);
 
end;
 
procedure risunok;
begin
form1.Canvas.Polygon([point(x,y),point(x1,y1),point(x2,y2)]);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Canvas.Pen.Color:=clBtnFace;
risunok;
 
a1:=a1+pi/18;
a2:=a2+pi/18;
if a1>2*pi then a1:=0;
if a2>2*pi then a2:=0;
x1:=x+round(r1*sin(a1));
y1:=y+round(r1*cos(a1));
x2:=x+round(r2*sin(a2));
y2:=y+round(r2*cos(a2));
Form1.Canvas.Pen.Color:=clblack;
risunok;
end;
 
end.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
15.10.2013, 19:58
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  x2,y2,a,x3,y3,x1,y1,x0,y0:integer;
  deg: Real;
 
implementation
 
{$R *.dfm}
 
procedure risunok;
begin
  Form1.Canvas.Polygon([point(x1,y1),point(x2,y2),point(x3,y3)]);
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
risunok;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Canvas.Pen.Color:=clBtnFace;
  risunok;
  x1:=round(x0 + 220 * cos(deg * a));
  y1:=round(y0 + 220 * sin(deg * a));
  x2:=round(x0 + 100 * cos(deg * a + pi * 3/ 4));
  y2:=round(y0 + 100 * sin(deg * a + pi * 3/ 4));
  x3:=round(x0 + 180 * cos(deg * a - pi * 3/ 4));
  y3:=round(y0 + 180 * sin(deg * a - pi * 3/ 4));
  inc(a);
  Canvas.Pen.Color := clGreen;
  risunok;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := not Timer1.Enabled;
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  x0 := ClientWidth div 2;
  y0 := ClientHeight div 2;
  deg := 2 * pi / 360;
  Canvas.Pen.Width := 3;
end;
 
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2013, 19:58
Помогаю со студенческими работами здесь

анимация с паузами
Подскажите пожалуйста как сделать : у меня две картинки, первая управляеться кнопками а вторая передвигаеться анимацией как сделать что бы...

Анимация в Delphi
Вопрос программистам. Как в Delphi открыть анимацию (подключить) через Image, Animate или ещё что-нибудь.....абсолютно не важно. Помогите...

Анимация ЭЦП
Мне нужно продемонстрировать процесс подписания ЭЦП(с помощью ассиметричного шифрования), по-хорошему с использованием библиотек, если есть...

Анимация в делфи
Составить программу, иллюстрирующую полет баллистической ракеты в зависимости от начальной скорости и начального направления вектора...

Анимация - движение стрелы на фоне рисунка
Изобразить рисунок с анимацией. Например, движение стрелы на фоне какого-нибудь рисунка


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru