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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2010, 23:16   #1
andik
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 21
По умолчанию Создание анимации на VisualBasic

Пожалуйста, подскажите, если у кого есть какие-нибудь мысли.
Задача: создать анимацию, чтобы круг плавно превращался в квадрат.
Примерный алгоритм будет примерно такой:
1) строим фигуру
2) небольшая задержка времени
3) стираем фигуру (рисуем фигуру с цветом фона)
и повторение.

Я просто не могу понять как сделать так, чтобы из круга получался квадрат.
Есть у меня такая идея: рисую квадрат в PictureBox, ввожу на нем систему координат (оператор scale), затем рисую внутри него квадрат поменьше, чтобы его диагональ была равно диагонали круга. А круг у нас будет увеличиваться примерно так:
for r=2 to 4 step 0.1
fillstyle=0
fillcolor=vbyellow
circle(0,0),r
next r
И при максимальном радиусе этот круг полностью закрашивает маленький квадрат.

Вот только мне эта идея кажется не очень хорошей. Есть у кого-нибудь идеи?
andik вне форума Ответить с цитированием
Старый 17.03.2010, 01:06   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

нужно использовать эллипс и его возможности рисования
на делфи можно так (winApi)

RoundRect( dc, 1, 1, r.Right, r.Bottom, FPercentEllipse, FPercentEllipse );

эта функция рисует эллипс с заданными параметрами:
dc - холст
2-4 параметры задают расположение и размеры прямоугольника
последние 2 параметра - процент закругления углов
увеличивая последних 2 параметра можно получить плавно круг из квадрата, и наоборот
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 19.03.2010, 14:33   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Примерно та же идея на Visual Basic for Application (ВБА).
  1. Строим круг в виде узловой линии (polyline) c восьмью узлами.
  2. Удаляем каждый второй узел (что непросто — через макрорекордер).
  3. Участки (4 сегмента) линии — спрямляем.

Если спрямлять не сразу, пошагово — получим нужный эффект.

(Остаётся принять, что 8-угольник с скруглёнными углами является кругом.)

Приложил пример проекта в документе. (Или проект проекта.)
Нажимая Ctrl-Z, после выполнения, можно наблюдать шаги построения.
Изображения
Тип файла: jpg Quadratur.jpg (44.4 Кб, 250 просмотров)
Вложения
Тип файла: doc Polygon.doc (36.0 Кб, 15 просмотров)

Последний раз редактировалось Sasha_Smirnov; 19.03.2010 в 23:10. Причина: иллюстрация.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 05.04.2010, 22:02   #4
andik
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 21
По умолчанию

Придумал однако такой алгоритм =)
Код:
Private Sub Picture1_Click()
Picture1.Scale (-15, 15)-(15, -15)
Picture1.BackColor = RGB(0, 255, 0)
'из круга в квадрат
i = 0
For r = 10 To 0 Step -0.01
i = i + 0.01
'рисуем линии
Picture1.Line (-i, 10)-(i, 10)
Picture1.Line (-i, -10)-(i, -10)
Picture1.Line (10, i)-(10, -i)
Picture1.Line (-10, i)-(-10, -i)
'рисуем дуги
Picture1.Circle (i, -i), r, , -3 * 3.14 / 2, -2 * 3.14
Picture1.Circle (i, i), r, , -2 * 3.14, -3.14 / 2
Picture1.Circle (-i, i), r, , -3.14 / 2, -3.14
Picture1.Circle (-i, -i), r, , -3.14, -3 * 3.14 / 2
For k = 1 To 50000
Next k
Picture1.Cls
Next r
'из квадрата в круг
For r = 0 To 10 Step 0.01
i = i - 0.01
'рисуем линии
Picture1.Line (-i, 10)-(i, 10)
Picture1.Line (-i, -10)-(i, -10)
Picture1.Line (10, i)-(10, -i)
Picture1.Line (-10, i)-(-10, -i)
'рисуем дуги
Picture1.Circle (i, -i), r, , -3 * 3.14 / 2, -2 * 3.14
Picture1.Circle (i, i), r, , -2 * 3.14, -3.14 / 2
Picture1.Circle (-i, i), r, , -3.14 / 2, -3.14
Picture1.Circle (-i, -i), r, , -3.14, -3 * 3.14 / 2
For k = 1 To 50000
Next k
Picture1.Cls
Next r
End Sub
PS: ну естественно сначала на форму добавляем PictureBox
andik вне форума Ответить с цитированием
Старый 09.04.2010, 23:22   #5
andik
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 21
По умолчанию

Немного переделал код, так лучше =)
Код:
Private Sub Form_click()
Picture1.Scale (-15, 15)-(15, -15)
Picture1.BackColor = vbBlue
End Sub

Private Sub Command1_Click()
For p = 0 To 4
'из круга в квадрат'
i = 0
For r = 10 To 0 Step -0.01
i = i + 0.01
'рисуем линии'
Picture1.FillStyle = 0
Picture1.FillColor = vbRed
Picture1.Line (-i, 10.01)-(i, -10.01), vbRed, BF
Picture1.Line (10.01, i)-(-10, -i), vbRed, BF
'рисуем дуги'
Picture1.Circle (i, -i), r, vbRed, -3 * 3.14 / 2, -2 * 3.14
Picture1.Circle (i, i), r, vbRed, -2 * 3.14, -3.14 / 2
Picture1.Circle (-i, i), r, vbRed, -3.14 / 2, -3.14
Picture1.Circle (-i, -i), r, vbRed, -3.14, -3 * 3.14 / 2
'задержка (пустой цикл)'
For k = 1 To 50000
Next k
'стираем то что нарисовано'
Picture1.Cls
Next r
'из квадрата в круг'
For r = 0 To 10 Step 0.01
i = i - 0.01
'рисуем линии'
Picture1.Line (-i, 10)-(i, -10.01), vbRed, BF
Picture1.Line (10.01, i)-(-10, -i), vbRed, BF
'рисуем дуги'
Picture1.Circle (i, -i), r, vbRed, -3 * 3.14 / 2, -2 * 3.14
Picture1.Circle (i, i), r, vbRed, -2 * 3.14, -3.14 / 2
Picture1.Circle (-i, i), r, vbRed, -3.14 / 2, -3.14
Picture1.Circle (-i, -i), r, vbRed, -3.14, -3 * 3.14 / 2
'задержка (пустой цикл)'
For k = 1 To 50000
Next k
'стираем то что нарисовано'
Picture1.Cls
Next r
Next p
End Sub
andik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание анимации Sergeu Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 01.01.2010 01:52
Создание анимации нажатия на кнопку Alex Cones Общие вопросы Delphi 8 27.04.2009 19:06
Помогите с VisualBasic RuNetStyle Помощь студентам 2 03.01.2009 00:45
Анимации Sanek777 Общие вопросы Delphi 0 02.11.2008 17:19
Задачка! VisualBasic vio Помощь студентам 1 25.10.2008 00:11