Уроки C# – Анимация в Windows Forms с амплитудой

preview_player
Показать описание

#Анимация #WindowsForms #Амплитуда
Рекомендации по теме
Комментарии
Автор

Несколько типов анимаций:
//простая линейная анимация - без замедления, без ускорения
double Linear(double curentTime, double startValue, double changeVaue, double duration)
{
return changeVaue * curentTime / duration + startValue;
}
//квадратичное замедление - ускорение с нулевой скорости
double QuadraticIn(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration;
return changeVaue * Math.Pow(curentTime, 2) + startValue;
}
//квадратичное замедление - ускорение до половины, затем замедление
double QuadraticOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration / 2;
if (curentTime < 1)
{
return changeVaue / 2 * Math.Pow(curentTime, 2) + startValue;
}
return -changeVaue / 2 * (curentTime * (curentTime - 2) - 1) + startValue;
}
//кубическое замедление - ускорение с нулевой скорости
double CubicIn(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration ;
return changeVaue * Math.Pow(curentTime, 3) + startValue;
}
//кубическое ослабление - замедление до нулевой скорости
double CubicOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration ;
curentTime--;
return changeVaue * (Math.Pow(curentTime, 3) +1) + startValue;
}
//кубическое ослабление - ускорение до половины, затем замедление
double CubicInOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration / 2;
if (curentTime < 1)
{
return changeVaue / 2 * Math.Pow(curentTime, 3) + startValue;
}
curentTime -= 2;
return changeVaue / 2 * (Math.Pow(curentTime, 3) + 2) + startValue;
}
//квартальное ослабления - ускорение с нулевой скорости
double QuarterIn(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration;
return changeVaue * Math.Pow(curentTime, 4) + startValue;
}
//квартальное ослабление - замедление до нулевой скорости
double QuarterOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration;
curentTime--;
return -changeVaue * (Math.Pow(curentTime, 4) - 1) + startValue;
}
//квартальное ослабление - ускорение до половины, затем замедление
double QuarterInOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration / 2;
if (curentTime < 1)
{
return changeVaue / 2 * Math.Pow(curentTime, 4) + startValue;
}
curentTime -= 2;
return -changeVaue / 2 * (Math.Pow(curentTime, 4) - 2) + startValue;
}
//пятикратное ослабление с ускорение с нулевой скорости
double QuinticIn(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration;
return changeVaue * Math.Pow(curentTime, 5) + startValue;
}
//пятикратное ослабление - замедление до нулевой скорости
double QuinticOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration;
curentTime--;
return changeVaue * (Math.Pow(curentTime, 5)+1) + startValue;
}
//пятиступенчатое ослабление - ускорение до половины, затем замедление
double QuinticInOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration / 2;
if (curentTime < 1)
{
return changeVaue / 2 * Math.Pow(curentTime, 5) + startValue;
}
curentTime -= 2;
return changeVaue / 2 * (Math.Pow(curentTime, 5) + 2) + startValue;
}
//синусоидальное замедление - ускорение от нулевой скорости
double SinIn(double curentTime, double startValue, double changeVaue, double duration)
{
return -changeVaue * Math.Cos(curentTime / duration * (Math.PI / 2)) + changeVaue + startValue;
}
//синусоидальное ослабление - замедление до нулевой скорости
double SinOut(double curentTime, double startValue, double changeVaue, double duration)
{
return changeVaue * Math.Sin(curentTime / duration * (Math.PI / 2)) + changeVaue + startValue;
}
//синусоидальное ослабление - ускорение до половины, затем замедление
double SinInOut(double curentTime, double startValue, double changeVaue, double duration)
{
return -changeVaue / 2 * (Math.Cos(Math.PI * curentTime / duration) - 1) + startValue;
}
//экспоненциальное замедление - ускорение с нулевой скорости
double ExpIn(double curentTime, double startValue, double changeVaue, double duration)
{
return changeVaue * Math.Pow(2, 10 * (curentTime / duration - 1)) + startValue;
}
//экспоненциальное ослабление - замедление до нулевой скорости
double ExpOut(double curentTime, double startValue, double changeVaue, double duration)
{
return changeVaue * (-Math.Pow(2, -10 * curentTime / duration) + 1) + startValue;
}
//экспоненциальное замедление - ускорение до половины, затем замедление
double ExpInOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration / 2;
if (curentTime < 1)
{
return changeVaue / 2 * Math.Pow(2, 10 * (curentTime - 1)) + startValue;
}
curentTime--;
return changeVaue / 2 * (-Math.Pow(2, -10 * curentTime) + 2) + startValue;
}
//круговое замедление - ускорение с нулевой скорости
double CirculIn(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration;
return -changeVaue * (Math.Sqrt(1 - Math.Pow(curentTime, 2)) - 1) + startValue;
}
//круговое ослабление - замедление до нулевой скорости
double CirculOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration;
curentTime--;
return changeVaue * Math.Sqrt(1 - Math.Pow(curentTime, 2)) + startValue;
}
//круговое замедление - ускорение до половины, затем замедление
double CirculInOut(double curentTime, double startValue, double changeVaue, double duration)
{
curentTime /= duration / 2;
if (curentTime < 1)
{
return -changeVaue / 2 * (Math.Sqrt(1 - Math.Pow(curentTime, 2)) - 1) + startValue;
}
curentTime -= 2;
return changeVaue / 2 * (Math.Sqrt(1 - Math.Pow(curentTime, 2) + 1) + startValue);
}

blackdream
Автор

Никто не рассказывает более смешно про перемещающиеся квадратики! 😄😄😄😄

walerij
Автор

Балдёж. Каждую ночь ролик, как раз делать нечего, вот пополняю знания

Dnlk-mipf
Автор

Ох, не перестаёте удивлять! Только что по этой простой формуле нашёл решение одной своей старой задачи связаной с обвесами персонажа. Она вообще на 3д движке и на другом языке, но конечно же всё сработало!)) Ещё раз огромное спасибо!!!

ruslansobr
Автор

я: - когда уже новые уроки по C#
Христ через полгода : - ИИИИ бац бац бац бац бац бац бац бац
я: - а теперь я не успеваю за ним)))
Спасибо большое за уроки!)))) очень помогают

DeXMask
Автор

Только зашел посмотреть не вышло ли чего нового.
И тут батц приходит уведомление о новом видео и тут я понял что удачно зашел :)

kolyawps
Автор

Хачатур, слов нет! Одни эмоции, спасибо за знание!!! Удачи Вам!!!

ВиллисКантор
Автор

Топовые хаки для повседневной разработки, лайк)

РоманСуворов-йт
Автор

Абалдеть! Ну это ж просто булочка!!! :)

ashimovroman
Автор

Приветствую вас граждане товарищи, ХрисТ это Джон Скит в наших интернетах, сложное не упрощая доносит до понимания просто и легко. ХрисТ может пора и свою книгу выпустить в свет?

orakul_azovstal
Автор

Урок интересный и неожиданно он мне пригодился в написании игры, а-ля PyGame. Делал плавную камеру и такая плавность очень была нужна.
Единственное, но: Формула, что была применена здесь меня ввела в ступор, отчего я применил следующую формулу, основываясь на уроке.
if panel2.Location.X > panel1.Location.X+10) { panel2.Location = new - panel2.Location.X) / 20) }
Если проще
Если Панель2 дальше Панели1 То
_ Сдвинуть Панель2 на поделённое на 20
Конец

ZEkA
Автор

Подача материала как всегда на высоте !!!

vladfoton
Автор

В програмировании нужна больше логика, чем математика. Я, например, не увидел ничего сложно, никакие логарифмы, интегралы и прочую шелуху. А visual studio, судя по всему, прошла магистратуру, аспирантуру и Эйс Вентуру🤣

BlendLogDev
Автор

@XpucT а ты можешь по WinUI 3 снять такие же отличные видосы?

spartansk
Автор

Была бы цель, а методы реализации найдутся! пальчик жать не забываю ;)

СерОрл-шм
Автор

Можете пожалуйста в следующем видео ответить на вопрос:wpf: я хочу в textblock генерировать рандомный текст, точнее в Run. Там будет бегать просто рандомный текст. Пробовал string animation, но value указывается один раз, поэтому создал dispatcher timer и через 30 мс меняет текст в run на рандомный (одинаковой длины). Что посоветуете?

title
Автор

10:40 Ну стоит сказать, что это не магия си шарпа, а магия в принципе любого языка - стандартное логическое отрицание. Единственное, что в некоторых древних языках надо написать побольше символов - not вместо !.

phat
Автор

Срочно нужно пройти курс по улучшению логического мышления :))))

SerhiiAponchyk
Автор

Всем привет!
Теперь интересно как нарисовать такую привьюху в люстре. По всем фронтам подтягиваете нас и математика и анимация)

van_k
Автор

Здравствуй, пожалуйста, сделай урок про создание/загрузку XML файла, ищу в интернете, не могу найти понятных инструкций!

TheDimonDK