Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 20.05.2019
Сообщений: 25
GraphABC

Анимация неваляшки

08.03.2020, 13:33. Показов 4753. Ответов 6
Метки нет (Все метки)

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

Pascal
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
Program Nevalyshka;
Uses crt, graphABC;
 
var
  x, y: integer;
 
begin
  setwindowwidth(800); //размер окна
  setwindowheight(600);
  LockDrawing;
  setpenwidth(3);
  setpencolor(clblack);
  //Туловище
  circle(320, 400, 100);
  floodfill(320,400,clred);
  
  //Голова
  circle(320,230,70);
  circle(320,230,60);
  floodfill(320,260,clwheat);
  
  //Брови л
   line(280,195,300,195);
   arc(282,200,5,90,180);
   arc(299,200,5,0,90);
   
   //Брови п
   line(340,195,360,195);
   arc(341,200,5,90,180);
   arc(359,200,5,0,90);
   
  //Глаза
  circle(290,220,15);
  circle(350,220,15);
    //Г.Яблоко
    circle(295,220,10);
    floodfill(294,220,claquamarine);
    circle(355,220,10);
    floodfill(354,220,claquamarine);
      //Зрачки
      circle(298,220,7);
      circle(358,220,7);
      floodfill(300,220,clblack);
      floodfill(360,220,clblack);
      //Ресницы л
      arc(280,199,10,210,270);
      arc(286,197,10,210,270);
      arc(295,195,10,210,270);
      //Ресницы п
      arc(338,196,10,270,340);
      arc(350,195,10,270,330);
      arc(360,199,10,270,330);
      
  //Нос
  arc(315,240,3,90,270);
  arc(325,240,3,90,-90);
    //Ноздри
    arc(315,245,3,100,10);
    arc(325,245,3,70,165);
    
  //Рот
  SetPenColor(clred);
  arc(320,250,20,0,-180);
  line(295,250,305,250);
  line(335,250,345,250);
  
  //Волосы
  SetPenColor(clsaddlebrown);
  setpenwidth(5);
    arc(295,180,5,90,280);
    line(295,185,310,178);
    arc(310,185,5,90,280);
    line(310,190,319,178);
    line(319,178,329,190);
    arc(327,185,5,280,400);
    line(330,183,343,181);
    arc(341,177,5,280,400);
    
  SetPenColor(clblack);
  setpenwidth(3);
  //Руки
  circle(225,315,30);
  circle(415,315,30);
  //line(445,315,500,315);
  redraw;
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.03.2020, 13:33
Ответы с готовыми решениями:

Анимация в OpenGL, а где собсно, анимация?
// Bounce.cpp // Demonstrates a simple animated rectangle program with GLUT // OpenGL SuperBible, 3rd Edition // Richard S. Wright...

VB 6 и анимация
Очень нужна помощь. Никак не могу разобраться. Задание такое - заставить кружок двигаться вниз, вправо, вверх, вправо. С таймерами...

Анимация
Здравствуйте. Помогите, пожалуйста, сделать такую анимацию. Смог сделать 1 объект, который катается по оси, а вот 4 не знаю, как сделать.

6
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
08.03.2020, 16:50
Из вашего кода ни чего не выйдет! Переписывать нужно всё!

Предположим, что у нас вот такая заготовка:
Pascal
1
2
3
4
5
6
7
8
9
uses GraphABC;
begin
  (Window.Width,Window.Height):=(600,600);
  Line(100,500,500,500);
 
  var(x0,y0,r0,l0):=(300,400,100,200);
  Circle(x0,y0,r0);
  Line(x0,y0+r0,x0,y0-l0);
end.
Заставим её просто отклоняться на несколько градусов относительно центра окружности.
Для этого зададим угол поворота относительно центра:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
uses GraphABC;
begin
  (Window.Width,Window.Height):=(600,600);
  Line(100,500,500,500);
 
  var(x0,y0,r0,l0):=(300,400,100,200);
  Circle(x0,y0,r0);
  var t:=-1.3;
  loop 14 do
    begin
      var(sint,cost):=(sin(t),cos(t));
      Line(x0+Round(sint*r0),y0+Round(cost*r0),x0-Round(sint*l0),y0-Round(cost*l0));
      t+=0.2;
    end;
end.
Вроде нормально, но мы не учли, что при отклонении матрёшки, происходит её смещение по поверхности.
Т.е. она представляет собой как-бы колесо, которое смещается при вращении.
Для этого нужно ещё смещать центр окружности на определённую величину:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
uses GraphABC;
begin
  (Window.Width,Window.Height):=(600,600);
  (Window.Left,Window.Top):=(200,200);
 
  var(x0,y0,r0,l0):=(300,400,100,200);
  var(tt,t):=(0.0,0.0);
  LockDrawing;
  repeat
    Window.Clear;
    Line(100,500,500,500);
    var(sint,cost):=(sin(t),cos(t));
    Circle(Round(x0-t*r0),y0,r0);
    Line(Round(x0+sint*r0-t*r0),Round(y0+cost*r0),Round(x0-sint*l0-t*r0),Round(y0-cost*l0));
    tt+=0.1;
    t:=sin(tt);
    Redraw;
    Sleep(20);
  until false;
end.
Таким образом мы добились эффекта раскачивания.
Уберём направляющую линию.
А вместо неё нарисуем голову.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses GraphABC;
begin
  (Window.Width,Window.Height):=(600,600);
  (Window.Left,Window.Top):=(200,200);
 
  var(x0,y0,r0,r1,r2):=(300,400,100,55,47);
  var(tt,t):=(0.0,0.0);
  Pen.Width:=2;
  LockDrawing;
  repeat
    Window.Clear;
    Line(100,500,500,500);
    var(sint,cost):=(sin(t),cos(t));
    Brush.Color:=clRed;Circle(Round(x0-t*r0),y0,r0);
    Brush.Color:=clWhite;Circle(Round(x0-sint*(r0+r1)-t*r0),Round(y0-cost*(r0+r1)),r1);
    Brush.Color:=clWheat;Circle(Round(x0-sint*(r0+r1)-t*r0),Round(y0-cost*(r0+r1)),r2);
    tt+=0.1;
    t:=sin(tt);
    Redraw;
    Sleep(20);
  until false;
end.
Дальше можете сами.
Только предупреждаю: нельзя использовать FloodFill потому, что это очень медленно и может грозить „артефактами“, когда зальётся не то, что нужно.

P.S. Математические выкладки я специально не приводил.
Во-первых, это заняло бы много времени.
А во-вторых, я не знаю вашего уровня математики. Поэтому пришлось бы объяснять с основ… А значит см. во-первых. ;–)
1
0 / 0 / 0
Регистрация: 20.05.2019
Сообщений: 25
08.03.2020, 17:04  [ТС]
Спасибо огромное!
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
08.03.2020, 17:42
Лучший ответ Сообщение было отмечено 9Misha как решение

Решение

Добавил руки, глаза, зрачки и рот в виде ломаной линии:
Pascal
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
uses GraphABC;
begin
  (Window.Width,Window.Height):=(600,600);
  (Window.Left,Window.Top):=(200,200);
 
  var(x0,y0,r0,r1,r2,r3):=(300,400,100,55,47,25);
  var(r4,r5,r6,r7):=(160,10,5,135);
  var(tt,t):=(0.0,0.0);
  Pen.Width:=2;
  LockDrawing;
  repeat
    Window.Clear;
    // основание
    Pen.Color:=clBlack;
    Line(100,500,500,500);
    var(sint,cost):=(sin(t),cos(t));
    // туловище
    Brush.Color:=clRed;Circle(Round(x0-t*r0),y0,r0);
    // голова
    Brush.Color:=clWhite;Circle(Round(x0-sint*(r0+r1)-t*r0),Round(y0-cost*(r0+r1)),r1);
    Brush.Color:=clWheat;Circle(Round(x0-sint*(r0+r1)-t*r0),Round(y0-cost*(r0+r1)),r2);
    // руки
    Brush.Color:=clWhite;
    Circle(Round(x0-sin(t+0.7)*(r0+r3)-t*r0),Round(y0-cos(t+0.7)*(r0+r3)),r3);
    Circle(Round(x0-sin(t-0.7)*(r0+r3)-t*r0),Round(y0-cos(t-0.7)*(r0+r3)),r3);
    // глаза
    Circle(Round(x0-sin(t+0.125)*r4-t*r0),Round(y0-cos(t+0.125)*r4),r5);
    Circle(Round(x0-sin(t-0.125)*r4-t*r0),Round(y0-cos(t-0.125)*r4),r5);
    Brush.Color:=clBlack;
    Circle(Round(x0-sin(t+0.14)*r4-t*r0),Round(y0-cos(t+0.14)*r4),r6);
    Circle(Round(x0-sin(t-0.11)*r4-t*r0),Round(y0-cos(t-0.11)*r4),r6);
    // рот
    Pen.Color:=clRed;
    Polyline(
      Pnt(Round(x0-sin(t+0.125)*r7-t*r0),Round(y0-cos(t+0.125)*r7)),
      Pnt(Round(x0-sin(t+0.06)*(r7-6)-t*r0),Round(y0-cos(t+0.06)*(r7-6))),
      Pnt(Round(x0-sin(t)*(r7-7)-t*r0),Round(y0-cos(t)*(r7-7))),
      Pnt(Round(x0-sin(t-0.06)*(r7-6)-t*r0),Round(y0-cos(t-0.06)*(r7-6))),
      Pnt(Round(x0-sin(t-0.125)*r7-t*r0),Round(y0-cos(t-0.125)*r7))
    );
    // 
    Redraw;
    Sleep(15);
    tt+=0.06;
    t:=sin(tt);
  until false;
end.
1
0 / 0 / 0
Регистрация: 20.05.2019
Сообщений: 25
08.03.2020, 18:11  [ТС]
Если вам не сложно расскажите, пожалуйста, как вы высчитываете наклон? (Объяснить можете как вам угодно, учусь на Мат. Факультете)
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
08.03.2020, 18:22
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Что-то не вяжется
Цитата Сообщение от 9Misha Посмотреть сообщение
учусь на Мат. Факультете
и примитив из: https://www.cyberforum.ru/post14316403.html

Цитата Сообщение от 9Misha Посмотреть сообщение
как вы высчитываете наклон?
Все объяснения были даны здесь: https://www.cyberforum.ru/post14316913.html
Запустите все приведённые программы и примените реверс-инжиниринг.
1
0 / 0 / 0
Регистрация: 20.05.2019
Сообщений: 25
08.03.2020, 18:25  [ТС]
Спасибо большое за проделанную вами работу!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2020, 18:25
Помогаю со студенческими работами здесь

Анимация js
$("body").append(modal); $(".modaljaix",0).animate({height: "100%"}, 100,function(){ ...

Анимация
Составте картинку которая движется , жедательно не очень простую

анимация
Помогите пожалуйста составит какую-нибудь анимацию на тему География Казахстана

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru