Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 18
1

Анимация движения шарика по пятиконечной звезде

19.03.2019, 21:06. Показов 1605. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Требуется создать анимацию движения шарика по пятиконечной звезде (только линии, не периметр и не заливка). Цвета не принципиально, но желательно... Помогите, пожалуйста, я вообще без понятия, как это делать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2019, 21:06
Ответы с готовыми решениями:

Анимация движения шарика по окружности
Есть программа в которой шарик движется от правой до левой стенки. Нужно переделать программу чтобы...

Анимация движения шарика по параболе
Помогите написать программу для движения шарика с регулируемой скоростью . График функции у = х*х ...

Анимация движения шарика по параболе с затуханием
Нужно сделать графику: движение шарика по параболе с затуханием. Ничего не получается, помогите...

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

13
Эксперт Pascal/Delphi
6810 / 4567 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
20.03.2019, 07:35 2
Цитата Сообщение от РомСтеп Посмотреть сообщение
пятиконечной звезде
Нарисовать пятиконечную звезду
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.03.2019, 11:59 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
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
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
mas=array of TPoint;
var
  Form1: TForm1;
  c,r,k,n:integer;
implementation
 
{$R *.dfm}
//создание отрезка по алгоритму Брезенхема
procedure brez_line(x1,y1,x2,y2:integer;var a:mas;var n:integer);
var dx,dy,errorX,errorY,incX,incY,d,currentX,currentY:integer;
begin
dx:=x2-x1;
dy:=y2-y1;
errorX:=0;
errorY:=0;
if dx>0 then incX:=1
else if dx=0 then incX:=0
else incX := -1;
if(dy > 0) then incY := 1
else if(dy = 0) then incY := 0
else incY := -1;
dx:=abs(dx);
dy:=abs(dy);
if(dy>dx) then d:=dy
else d:=dx;
currentX:=x1;
currentY:=y1;
while((currentX<>x2) or (currentY<>y2)) do
 begin
  errorX:=errorX+dx;
  errorY:=errorY+dy;
  if errorX>=d then
   begin
    errorX:=errorX-d;
    currentX:=currentX+incX;
   end;
  if errorY>=d then
   begin
    errorY:=errorY-d;
    currentY:=currentY+incY;
   end;
  //пишем точки в массив 
  inc(n);
  setlength(a,n);
  a[n-1].x:=currentX;
  a[n-1].y:=currentY;
 end;
end;
//создание массива "всех" точек звезды
procedure massiv(var a:mas;var n,r:integer);
var p:array[1..11] of TPoint;
    i:integer;
    u:real;
begin
//вычисляем координаты вершин звезды
u:=pi/10; // от правого гор. луча
for i:=1 to 11 do
 begin
  if (i mod 2=0) then
   begin // впадина
    p[i].x:=c+round(r*0.38*cos(u));
    p[i].y:=c-round(r*0.38*sin(u));
   end
  else
   begin // луч
    p[i].x:=c+round(r*cos (u));
    p[i].y:=c-round(r*sin(u));
   end;
  u:=u+pi/5;
 end;
//формируем массив всех точек звезды(траектория движения шарика)
n:=0;
for i:=1 to 10 do
brez_line(p[i].x,p[i].y,p[i+1].x,p[i+1].y,a,n);
end;
//рисование звезды
procedure zvezda(a:mas;n:integer;cv:TCanvas);
var i:integer;
begin
cv.MoveTo(a[0].x,a[0].y);
for i:=1 to n-1 do
cv.LineTo(a[i].x,a[i].y);
end;
//рисование шарика
procedure shar(x,y:integer;cv:TCanvas);
begin
cv.Pen.Color:=clRed;
cv.Brush.Color:=clRed;
cv.Ellipse(x-10,y-10,x+10,y+10);
end;
//задание некоторых параметров программы
procedure TForm1.FormCreate(Sender: TObject);
begin
//размер и положение графического окна
ClientWidth:=500;
ClientHeight:=500;
Position:=poScreenCenter;
c:=250;  //центр
r:=200; //внешний радиус звезды
k:=0; //счетчик точек для рисования шара
Timer1.Interval:=10; //интервал таймера
doublebuffered:=true;//уменьшение мерцания
end;
//рисование
procedure TForm1.FormPaint(Sender: TObject);
var a:mas;
begin
massiv(a,n,r);
zvezda(a,n,Canvas);
shar(a[k].x,a[k].y,Canvas);
end;
//движение шара
procedure TForm1.Timer1Timer(Sender: TObject);
begin
inc(k);
if k=n then k:=0;
repaint;
end;
Вложения
Тип файла: zip Шарик по звезде.zip (188.4 Кб, 13 просмотров)
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.03.2019, 12:28 4
Если от верхней вершины по часовой стрелке, то так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//вычисляем координаты вершин звезды
u:=pi/2; // от правого гор. луча
for i:=1 to 11 do
 begin
  if (i mod 2=0) then
   begin // впадина
    p[i].x:=c+round(r*0.38*cos(u));
    p[i].y:=c-round(r*0.38*sin(u));
   end
  else
   begin // луч
    p[i].x:=c+round(r*cos (u));
    p[i].y:=c-round(r*sin(u));
   end;
  u:=u-pi/5;
 end;
0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 18
09.04.2019, 20:02  [ТС] 5
Большое Вам спасибо. Но, скажите пожалуйста, вот из этого что-то подобное можно наколдовать?
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
var
  Form1: TForm1;
  cc:char;
implementation
procedure TForm1.pr1(Sender: TObject; var Key: Char);
begin
cc:=key;
end;
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.pr1(Sender: TObject);
var x,y,i:word; a:real;f,r:integer;
begin r:=200;
Form1.color:=clnavy; canvas.Pen.Width:=3; f:=15; a:=3*pi/2;
repeat
  application.ProcessMessages;
  for i:= 1 to 200 do
  x:=x+1;
  for i:= 1 to 200 do begin;// рисуем звезду линиями
  x:=x+0.5; y:=y+50;
  for i:= 1 to 200 do
 
  for i:= 1 to 200 do
 
  for i:= 1 to 200 do
 
   canvas.pen.color:=clyellow;
  canvas.Ellipse(x,y,x+10,y+10); sleep(15);
  case cc of
   'a':f:=f+5;
   'b':f:=f-5;
   'u':canvas.Pen.Color:=clgreen;
   else canvas.Pen.Color:=clnavy;
  end;
  canvas.Ellipse(x,y,x+10,y+10);
  a:=a+pi/360;
until cc='q' ;
end;
То есть Рисовать звезду насквозь, чтобы шарик при движении по траектории оставлял за собой след другого цвета??
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
10.04.2019, 09:13 6
Не понял что Вы пишете, приложите подробное задание и архив этого проекта.
Мой вариант с траекторией.
Вложения
Тип файла: zip Шарик по звезде с траекторией.zip (188.6 Кб, 8 просмотров)
0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 18
14.04.2019, 20:34  [ТС] 7
Вот пример. квадрат движется по эллипсу, "рисуя" его другим цветом на заданном фоне.
Мне нужно, чтобы таким же образом шарик двигался по звезде (см. вложения). и рисовать эту звезду линиями, с помощью циклов
Миниатюры
Анимация движения шарика по пятиконечной звезде  
Вложения
Тип файла: zip пример.zip (3.1 Кб, 7 просмотров)
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
15.04.2019, 08:37 8
И что за чудо в архиве? Где файлы .dfm, .pas?
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
15.04.2019, 09:06 9
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
var
  x,y,scale: single;
  i,j:       integer;
 
procedure TimerProc(wnd,msg,wparam,lparam: Cardinal);stdcall;
const
  step: array[0..4] of record
                       x,y,l: single;
                       end=((X: 0.375; Y:-1; l: 8),(X: 0.375; Y:1; l: 8),(X: -1; Y:-5/7; l: 7),(X: 1; Y:0; l:8),(X: -1; Y: 5/7; l: 7));
begin
  x:=x+step[j].x;
  y:=y+step[j].y;
  inc(i);
  if i>step[j].l*scale then
  begin
    inc(j);
    if j>4 then
      j:=0;
    i:=0;
  end;
  Form1.Canvas.Ellipse(round(x-10),round(y-10),round(x+10),round(y+10));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
scale:=Form1.ClientHeight shr 4;
x:=Form1.ClientWidth shr 1-scale*3;
y:=Form1.ClientHeight shr 1+scale*4;
SetTimer(Form1.Handle,0,10,@TimerProc);
end;
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
15.04.2019, 10:54 10
Круто!!!
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
15.04.2019, 11:04 11
а для чего WinApi тут, стесняюс спросить?
и обращение к переменной Form1 в методе класса TForm1
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
15.04.2019, 14:11 12
krapotkin
Согласен.
0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 18
15.04.2019, 21:14  [ТС] 13
вот, исправлено.
Вложения
Тип файла: zip пример.zip (212.0 Кб, 8 просмотров)
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
15.04.2019, 21:18 14
И что? Ну нажми на кнопку и что увидишь.
0
15.04.2019, 21:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2019, 21:18
Помогаю со студенческими работами здесь

Динамика движения шарика
динамика движения шарика

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

Отрисовка движения шарика по кривой
Доброго времени суток. Прошу вашей помощи. Вот задача: Есть кривая (что-то вроде ямки), нужно...

Динамика движения шарика по заданной траектории
динамика движения шарика по заданной траектории


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

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