Лекция
This presentation is the property of its rightful owner.
Sponsored Links
1 / 17

анимация PowerPoint PPT Presentation


  • 121 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


3603408

Лекция

анимация


3603408

Анимация

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

Для этого:

  • Изменения должны быть маленькими.

  • Изменения должны происходить часто.


3603408

Плохая анимация

Такая "анимация" парализует пользовательский интерфейс.

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();

}


Timer

Класс Timer

Объект System.Windows.Forms.Timer является источником повторяющихся событий. Точность определения интервала времени между событиями составляет 55 мс.

Timertimer = newTimer();

timer.Interval = 40;

timer.Tick += timer1_Tick;

timer.Start();


3603408

Хорошая анимация

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

}

Другие коллекции


3603408

Физика (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;

//...

}


3603408

Одномерное движение

V = V + F(X, V)

X = X + V

По инерции:

f = 0

В однородном поле:

f = const

Упругие колебания:

f = - k * x


3603408

Одномерная модель

classBody1D

{

publicfloat X;

publicfloat V;

publicfloat R = 20;

publicvoid Step(float F)

{

V += F;

X += V;

}

}


3603408

Буферизация рисования

Создаем пустой Image по размеру картинки.

Направляем графический вывод в него.

Рисуем Image методомDrawImageUnscaled().


3603408

Двумерное движение

Vx = Vx + Fx/m

Vy = Vy + Fy/m

X = X + Vx

Y = Y + Vy


3603408

Двумерная модель

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;

}

}


3603408

Движение в центральном поле

В центральном поле:

F = c * R/ (r * r * r)

F и R – векторы

F

V

R


3603408

Трансформации

Графический вывод всегда претерпевает трансформацию.

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


3603408

Виды трансформаций

  • Сдвиг:

    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(α)


3603408

Программирование трансформаций

Первый способ.

Вычислить 6 чисел и создать экземпляр класса Matrics. Присвоить этот экземпляр свойству Graphics.Transform.

Второй способ.

Последовательно выполнить некоторые из методов Graphics:

  • TranslateTransform

  • ScaleTransform

  • RotateTransform

  • ResetTransform


3603408

Поворот вокруг точки

Graphicsg = CreateGraphics();

1) g.TranslateTransform(dx, dy);

2) g.RotateTransform(fi);

3) g.DrawImageUnscaled(bar,-d,-d);

2)

1)

3)


3603408

Самостоятельно

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


  • Login