Code Every Day 🚀
30 subscribers
687 photos
243 videos
22 files
174 links
Просто для развлечения
Download Telegram
День 18: Заметка 2: AccelerateDecelerate интерполятор

На видео выше 5 шарик движется с ускорением до определенного момента и затем с замедлением.
Для этого в файл с интерполяторами дописал новую реализацию, которая использует формулу y = cos((time+1)π)/2+0.5

class AccelerateDecelerateInterpolator : public Interpolator {
public:
int type = Interpolator::TYPE_ACCELERATE_DECELERATE;

float a = 0.5;
float b = 2;

virtual float calculate(double time) {
return cos((time + 1) * 3.14)/b + a;
}
};


#Arduino
👍1
День 18: Заметка 3: Код примера Moving Objects 2

#Arduino
👍1
День 18: Заметка 4: Сувениры на память

👨‍💻 Почти 10 лет назад мне довелось принимать участие в одном из крупных проектов (в те времена проект только стартовал и было не понятно, что станет таким каким стал).
👉 Проект работает и по сей день. Тот, кто живет в Мск, возможно, о нем даже слышал. Ну, не суть.
👍 Прошло столько времени, а сувенир до сих пор напоминает о тех интересных временах, товарищах, с которыми вместе работали.
🤔 Примерно в 2015 году (если не ошибаюсь) у меня появился этот сувенир, тогда не предполагал, что в 2023 году я о нем напишу здесь.

#Life
👍1
Media is too big
VIEW IN TELEGRAM
День 19: Заметка 1: Продолжаю двигать кружочки

Реализовал парочку интерполяторов.

👉 Cycle - циклический, позволяет повторять несколько раз цикл перемещения, описывается формулой y = sin (2π × C × t)
👉 OvershootInterpolator - интерполятор с перерегулированием, описывается формулой y = (T + 1) × (t − 1)^3 + T × (t − 1)^2 + 1; позволяет реализовать движение с замедлением и в конечной точке небольшой отскок.

Наглядно видно на демо.
🔥1
👉 Для наглядности cycle интерполятор

class CycleInterpolator : public Interpolator {
public:
int type = Interpolator::TYPE_CYCLE;

float c = 2;

virtual float calculate(double time) {
return sin(c * 3.14 * time);
}
};
👍1
👉 Overshooting интерполятор

class OvershootingInterpolator : public Interpolator {
public:
int type = Interpolator::TYPE_CYCLE;

float c = 0.5;

virtual float calculate(double time) {
return (c + 1) * pow(time - 1, 3) + c * pow(time - 1, 2) + 1;
}
};
👍1
Media is too big
VIEW IN TELEGRAM
День 20: Заметка 1: Анимация пульсации

Сегодня решил набросать пример пульсирующей точки.

Код анимации прост и состоит из двух частей:
👉 сначала необходимо последовательно расширять круг до целевого радиуса
👉 затем наоборот круг сворачивается обратно в точку.

На каждом цикле отрисовки радиус увеличивается (или уменьшается) на 1 единицу (или с определенным шагом). При уменьшении нужно еще затирать ранее нарисованные окружности, чтобы создавался эффект уменьшения круга.

📷 Демо на видео.

#Arduino
👍1
👉 Код примера
Для анимации пульсирующей точки
Media is too big
VIEW IN TELEGRAM
День 21: Заметка 1: Падающие шарики

👨‍💻Собрал демо падающих объектов.

👉 Использовал ранее наработанные интерполяторы.
На демо видно, как объекты генерируются рандомно в пределах ширины и высоты панели со случайны радиусом.
Затем вычисляется расстояние, которое они должны пролететь до края панели и применяется bounce интерполятор.

#Arduino
👍1
👉 Код для демо падающих объектов
👍1
Media is too big
VIEW IN TELEGRAM
День 22: Заметка 1: Коллизии для шариков

🤟 Хай, кодерс!

🎯 Так-так-так, катать шарики научился, теперь хотелось бы реализовать коллизии, то есть факт столкновения двух и более шариков в процессе их движения.

👉 Для кружков логика простая: два круга пересекаются, если сумма их радиусов больше расстояние между их центрами.

👉 Вспомним школу: расстояние между точками равно сумме квадратов разниц их координат. Это будем использовать для определения коллизий.

В демо:
👉 реализовано перемещение по экрану (впределах панели) двух шаров
👉 слева сверху есть счетчик столкновений
👉 при столкновении счетчик меняется и меняется цвет шариков

#Arduino
👍1