Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 12
1

Анимация движения шара

26.03.2021, 23:23. Показов 2147. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Задача сделать анимацию движения шара по траектории. Т.е. сначала было задание нарисовал просто шар на упоминал плоскости и траекторию полёта. А теперь нужно анимировать. Траектория была нарисована с помощью arc. Как создавать анимацию на канве я понимаю. Проблема в траектории движения. Как-то можно узнать уравнение эллипса, заданного arc ? Потому что значения точек для отрисовки траектории были подобраны в ручную на глаз. Или подскажите какие ещё варианты решения есть.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2021, 23:23
Ответы с готовыми решениями:

Как изменить скорость движения одного шара, чтобы спутники двигались с разными скоростями и сталкивались
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Shape и анимация движения
Задание состоит в том, чтобы "лифт" (в данном случае прямоугольный Shape) перемешался между...

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

Анимация возвратно-поступательного движения
Здравствуйте, нужна помощь срочно! Нарисовал подобие коленвала с поршнями - в одну сторону...

8
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
27.03.2021, 08:34 2
Например так.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
c:=250;//центр, начало координат
r1:=200;//полуось а
r2:=150;//полуось b
a:=pi/10;//угол начала дуги
b:=pi-pi/10;//угол конца дуги
u:=a; //рисуем дугу
while u<=b do
 begin
  x:=c+round(r1*cos(u));
  y:=c-round(r2*sin(u));
  if u=a then canvas.moveto(x,y)else canvas.lineto(x,y);
  u:=u+0.01;
 end;
end;
Миниатюры
Анимация движения шара  
1
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 12
27.03.2021, 10:41  [ТС] 3
Благодарю. Т. е. У меня есть уже нарисованая траектория через arc и мне нужно теперь подсчитать длину полуосей, центра и углы. И дальше уже останется нарисовать анимацию. Я пока не за компом, не подскажите трудности с подсчетом какие-нибудь могут возникнуть?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
27.03.2021, 11:52 4
Ваши слова ни о чем. Напишите точное и полное условие задачи и приложите ахив проекта(то что уе есть.)
0
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 12
27.03.2021, 12:11  [ТС] 5
Вот проект. Нужно сделать анимацию полёта шарика по нарисованной траектории.
Вложения
Тип файла: zip Lab.zip (53.3 Кб, 6 просмотров)
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
27.03.2021, 12:23 6
Вообще-то у Вас задача скорее всего изобразить полет тела, брошенного под углом к горизонту. Да еще судя по рисунку изобразить его отскоки от поверхности. Предлагаю Вам все же создать новую тему в которой написать точное и полное задание, а не
Цитата Сообщение от TNSG Посмотреть сообщение
Задача сделать анимацию движения шара по траектории.
0
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 12
27.03.2021, 12:50  [ТС] 7
Дело в том, что пока нам дали именно просто анимировать движение шара.
Полёт тела изобразить нам нужно будет скорее всего только в следующем семестре
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
27.03.2021, 14:22 8
Лучший ответ Сообщение было отмечено TNSG как решение

Решение

Заменил рисованнный шарик на Shape. Не смог победить подергивание при переходе с прямой на дугу.
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
var
  Form1: TForm1;
  a,b,cx,cy,x,y:integer;
  u1,u2,u:double;
implementation
 
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
a:=150;
b:=215;
cx:=213;
cy:=245;
u1:=3*pi/4;
u2:=0;
u:=u1;
x:=10;
y:=165;
with Shape1 do
 begin
  shape:=stCircle;
  brush.Color:=clRed;
  width:=20;
  height:=20;
  left:=10;
  top:=165;
 end;
Timer1.Enabled:=false;
Timer1.Interval:=20;
end;
//рисуем исходную обстановку
procedure TForm1.FormPaint(Sender: TObject);
begin
 with Form1.Canvas do
  begin
    Brush.Color:=clWhite;
    Pen.Color:=clBlack;
    Pen.Width:=1;
    Pen.Style:=psSolid;
    RoundRect(0,0,400,300,5,5);
    RoundRect(20,260,360,280,5,5);    //
    Brush.Color:=clBlack;
    Brush.Style:=bsBdiagonal;
    FloodFill(25,265,clBlack,fsBorder);
    Brush.Style:=bsSolid;
    Brush.Color:=clWhite;
 
 
    MoveTo(5,260) ;          //ось X
    LineTo(395,260) ;
    LineTo(385,255) ;       //стрелочка
    MoveTo(395,260) ;
    LineTo(385,265) ;
    TextOut(392,265,'X');
 
    MoveTo(20,295) ;          //ось Y
    LineTo(20,5) ;
    LineTo(15,15) ;
    MoveTo(26,15) ;
    LineTo(20,5) ;
    TextOut(30,5,'Y');
 
    MoveTo(20,175) ; //прямая в шарике
    LineTo(200,175) ;
 
    MoveTo(20,175) ; //косая из шарика
    LineTo(150,45);
 
    LineTo(140,48) ;       //стрелочка
    MoveTo(150,45) ;
    LineTo(148,55) ;
 
    TextOut(70,70,'V');
    TextOut(10,265,'0');
    Font.Height:=(10);
    TextOut(75,75,'0');
    //шарик заменим на Shape
   { Brush.Color:=clBlack;
    Ellipse(5,190,35,160);           //шарик }
 
    MoveTo(50,260) ;          //прямая от шарика до оси X
    LineTo(50,175) ;
 
    LineTo(55,185) ;
    MoveTo(50,175) ;
    LineTo(50,175) ;
    LineTo(45,185) ;
 
    MoveTo(55,250) ;
    LineTo(50,260) ;
    LineTo(45,250) ;
 
    Brush.Color:=clWhite;
    Pen.Color:=clBlack;
    Pen.Width:=1;
    Pen.Style:=psSolid;
    TextOut(70,210,'0');
    Font.Height:=(10);
    TextOut(65,210,'y');
 
    //TextOut(65,240,'y');
    //Pen.Color:=clWhite;
    //MoveTo(70,230);
    // LineTo(450,319);
     //chord (10,150,50,200,50,175,30,150) ;
 
     Arc(50,120,100,180,87,175,75,135);
     TextOut(110,140,'a');   //полукруг угла
     Pen.Color:=clBlack;
     Pen.Style:=psDot;
     Arc(63,30,363,460,250,249,95,45);
     MoveTo(360,260) ;
     LineTo(380,240) ;
 end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if x<=95 then
 begin
  x:=x+1;
  y:=y-1;
 end
else
 begin
  u:=u-0.01;
  x:=cx+round(a*cos(u))-10;
  y:=cy-round(b*sin(u))-10;
  if u<=u2 then Timer1.Enabled:=false;
 end;
Shape1.Left:=x;
Shape1.Top:=y;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
Форма
Миниатюры
Анимация движения шара  
1
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 12
27.03.2021, 22:31  [ТС] 9
Благодарю! По коду всё понятно. Попробую доработать, отскок тоже анимировать.
0
27.03.2021, 22:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2021, 22:31
Помогаю со студенческими работами здесь

Анимация движения луны по небу в Delphi
Ребята срочно нужна помощь,помогите хотя бы как начать делать(какие команды использовать,хоть...

Траектория движения шара
Помогите исправить что не работает плиииз =) unit Unit1; interface uses Windows,...

Траектория движения шара
Ребят подскажите любой гайд , где можно вычитать всё для того чтоб сделать програму &quot;Построить...

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

Анимация движения шарика по пятиконечной звезде
Здравствуйте. Требуется создать анимацию движения шарика по пятиконечной звезде (только линии, не...

Не отображается стандартная анимация - не видно ни картинки, ни самого движения
Здравствуйте!Подскажите пожалуйста, по каким причинам может не отображаться стандартная анимация?Не...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru