Фейерверк

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

Параметры частиц:

constructor(x, y)
    {
      this.cur_x = x   // текущие координаты частицы
      this.cur_y = y   
      this.cent_x = x  // центр салюта
      this.cent_y = y  
      this.speed = Math.random() * 10 + 2  // скорость частицы в интервале [2, 12]
      this.angle = Math.round(Math.random() * 72) * 5  // направление скорости в виде угла  0 до 2pi с шагом pi/36
      this.color = 'red'
      this.state = 0 // состояние частицы, закончила ли она свой полёт 
      this.x_speed = this.speed * Math.cos(rad(this.angle)) // скорости по осям, перевод из полярной системы координат
      this.y_speed = this.speed * Math.sin(rad(this.angle))
    }

Цвет частицы задавал в зависимости от расстояния до центра салюта:

this.color = `rgb(255,${distance(this.cent_x, this.cent_y, this.cur_x, this.cur_y)/350 * 255},0)`
Исходники: