1 / 17

анимация

Лекция. анимация. Анимация. Анимация - дискретные изменения вида или расположения объекта, которые кажутся нам непрерывными. Для этого: Изменения должны быть маленькими. Изменения должны происходить часто. Плохая анимация. Такая " анимация " парализует пользовательский интерфейс.

nowles
Download Presentation

анимация

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Лекция анимация

  2. Анимация Анимация - дискретные изменения вида или расположения объекта, которые кажутся нам непрерывными. Для этого: • Изменения должны быть маленькими. • Изменения должны происходить часто.

  3. Плохая анимация Такая "анимация" парализует пользовательский интерфейс. intdx = 1;// сдвиг в пикселях // Метод изменяет расположение кнопки void Step() { // Когда кнопка у вертикальной стенки, меняется направление сдвига if (button1.Right > Width || button1.Left < 0) dx = -dx; button1.Left += dx; } privatevoid button1_Click(object sender, EventArgs e) { for (; ; ) Step(); }

  4. Класс Timer Объект System.Windows.Forms.Timer является источником повторяющихся событий. Точность определения интервала времени между событиями составляет 55 мс. Timertimer = newTimer(); timer.Interval = 40; timer.Tick += timer1_Tick; timer.Start();

  5. Хорошая анимация intdx = 10; void Step() { if (button1.Right > Width || button1.Left < 0) dx = -dx; button1.Left += dx; } privatevoid timer1_Tick(object sender, EventArgs e) { Step(); } privatevoid button1_Click(object sender, EventArgs e) { timer1.Start(); // Good movie } Другие коллекции

  6. Физика (17 век) a = f / m Знание закона движения f(x, v) и начальных условий (x0, v0) позволяет определить положение тела в любой момент времени. Теория Практика ∆v/ ∆t = a = f / m ∆v = f * (∆t/ m) ------------------------ v' = v + ∆v x' = x + ∆v * ∆t x = x0; v = v0; for (;;) { v += f(x, v); x +=v; //... }

  7. Одномерное движение V = V + F(X, V) X = X + V По инерции: f = 0 В однородном поле: f = const Упругие колебания: f = - k * x

  8. Одномерная модель classBody1D { publicfloat X; publicfloat V; publicfloat R = 20; publicvoid Step(float F) { V += F; X += V; } }

  9. Буферизация рисования Создаем пустой Image по размеру картинки. Направляем графический вывод в него. Рисуем Image методомDrawImageUnscaled().

  10. Двумерное движение Vx = Vx + Fx/m Vy = Vy + Fy/m X = X + Vx Y = Y + Vy

  11. Двумерная модель classBody { publicfloat X, Y; // координаты publicfloatVx, Vy; // скорость publicfloat R = 20; // радиус publicSize Box;// границы publicvoid Step(floatFx, floatFy) { if (X < 0 || X > Box.Width) Vx = -Vx; if (Y < 0 || Y > Box.Height) Vy = -Vy; Vx += Fx; Vy += Fy; X += Vx; Y += Vy; } }

  12. Движение в центральном поле В центральном поле: F = c * R/ (r * r * r) F и R – векторы F V R

  13. Трансформации Графический вывод всегда претерпевает трансформацию. Мы этого не замечали, т.к. по умолчанию установлена тождественная трансформация.

  14. Виды трансформаций • Сдвиг: x' = x + Dx, y' = y + Dy, • Растяжение : x' = Kx * x, y' =Ky* y • Поворот: x'= x * cos(α) - y * sin(α);y'= y * cos(α) + x * sin(α); Для задания любой трансформации достаточно шести чисел: Dx,Dy, Kx,Ky, sin(α), cos(α)

  15. Программирование трансформаций Первый способ. Вычислить 6 чисел и создать экземпляр класса Matrics. Присвоить этот экземпляр свойству Graphics.Transform. Второй способ. Последовательно выполнить некоторые из методов Graphics: • TranslateTransform • ScaleTransform • RotateTransform • ResetTransform

  16. Поворот вокруг точки Graphicsg = CreateGraphics(); 1) g.TranslateTransform(dx, dy); 2) g.RotateTransform(fi); 3) g.DrawImageUnscaled(bar,-d,-d); 2) 1) 3)

  17. Самостоятельно Сделать часы со стрелами, в том числе с секундной.

More Related