Alexander Deplov

Spirograph v2

Spirograph v2

Code

var bg = new Path.Rectangle({
    size: view.bounds,
    fillColor: 'black',
    position: view.center
})
var clones = 8
var angle = 360 / clones
var fiveCirclesGroup = new Group()
for (var i = 0; i < clones; i++) {
    var path = new Path.Rectangle({
        size: 5,
        radius: 5,
        fillColor: 'orange',
        position: view.center + [0, 120],
        opacity: 0
    })
    path.rotate(angle * i, view.center)
    fiveCirclesGroup.addChild(path)
}
var obj1;
var objectsGroup = new Group()
var objAround;

function onFrame(event) {
    fiveCirclesGroup.rotate(1)
    objectsGroup.rotate(-0.03)
    fiveCirclesGroup.position.x = view.center.x + Math.cos(event.count * 0.04) * 50 + Math.sin(event.count * 0.02) * 250
    fiveCirclesGroup.position.y = view.center.y + Math.sin(event.count * 0.04) * 50
    obj1 = new Path.Rectangle({
        size: [20, 20],
        fillColor: 'red',
        radius: 5,
    })
    obj1.fillColor = 'red'
    obj1.rotate(event.count)
    objectsGroup.addChild(obj1)
    if (objectsGroup.children.length >= 10) {
        objectsGroup.children[0].remove()
    }
    obj1.scaling += 2 + 1.5 * Math.sin(event.count * 0.1)
    for (var i = 0; i < fiveCirclesGroup.children.length; i++) {
        obj1.position = fiveCirclesGroup.children[i].position
        obj1.fillColor.hue -= event.count * 0.25
    }
    objAround = obj1.clone()
    objAround.position = obj1.position
    objAround.strokeWidth = 2
    objAround.scale(2.3)
    objAround.fillColor = 'transparent'
    objAround.strokeColor = 'blue'
    objAround.strokeColor.hue += (obj1.fillColor.hue + i) - 50
    objAround.opacity = 0.2
    objectsGroup.addChild(objAround)
    if (objectsGroup.children.length > 200) {
        objectsGroup.children[0].remove()
    }
    objectsGroup.addChild(objAround)
}