Code Sketch


Bhakti datta rane
By: Mhalsakant School
Category: Art
// ==========================================
// MOVING SOLAR SYSTEM
// SCIENCE PROJECT - SCALA
// ==========================================

cleari()
originBottomLeft()

var angle1 = 0.0
var angle2 = 0.0
var angle3 = 0.0
var angle4 = 0.0

def drawSpace(canvas: CanvasDraw) {

  canvas.background(5, 8, 25)

  // -----------------------------
  // SUN
  // -----------------------------

  canvas.noStroke()

  canvas.fill(255, 180, 0)
  canvas.ellipse(
    cwidth / 2.0,
    cheight / 2.0,
    100,
    100
  )

  canvas.fill(255, 240, 100)
  canvas.ellipse(
    cwidth / 2.0,
    cheight / 2.0,
    70,
    70
  )

  // -----------------------------
  // ORBITS
  // -----------------------------

  canvas.noFill()
  canvas.stroke(80, 80, 120)
  canvas.strokeWeight(1)

  canvas.ellipse(
    cwidth / 2.0,
    cheight / 2.0,
    180,
    180
  )

  canvas.ellipse(
    cwidth / 2.0,
    cheight / 2.0,
    270,
    270
  )

  canvas.ellipse(
    cwidth / 2.0,
    cheight / 2.0,
    360,
    360
  )

  canvas.ellipse(
    cwidth / 2.0,
    cheight / 2.0,
    450,
    450
  )

  // -----------------------------
  // MERCURY
  // -----------------------------

  val mercuryX =
    cwidth / 2.0 +
    math.cos(angle1) * 90

  val mercuryY =
    cheight / 2.0 +
    math.sin(angle1) * 90

  canvas.fill(180, 180, 180)
  canvas.ellipse(
    mercuryX,
    mercuryY,
    20,
    20
  )

  // -----------------------------
  // VENUS
  // -----------------------------

  val venusX =
    cwidth / 2.0 +
    math.cos(angle2) * 135

  val venusY =
    cheight / 2.0 +
    math.sin(angle2) * 135

  canvas.fill(255, 170, 50)
  canvas.ellipse(
    venusX,
    venusY,
    28,
    28
  )

  // -----------------------------
  // EARTH
  // -----------------------------

  val earthX =
    cwidth / 2.0 +
    math.cos(angle3) * 180

  val earthY =
    cheight / 2.0 +
    math.sin(angle3) * 180

  canvas.fill(50, 120, 255)
  canvas.ellipse(
    earthX,
    earthY,
    35,
    35
  )

  // Moon
  val moonX =
    earthX +
    math.cos(angle3 * 3) * 25

  val moonY =
    earthY +
    math.sin(angle3 * 3) * 25

  canvas.fill(220, 220, 220)
  canvas.ellipse(
    moonX,
    moonY,
    10,
    10
  )

  // -----------------------------
  // MARS
  // -----------------------------

  val marsX =
    cwidth / 2.0 +
    math.cos(angle4) * 225

  val marsY =
    cheight / 2.0 +
    math.sin(angle4) * 225

  canvas.fill(230, 70, 50)
  canvas.ellipse(
    marsX,
    marsY,
    30,
    30
  )

  // -----------------------------
  // TITLE
  // -----------------------------

  canvas.fill(0, 255, 255)

  canvas.text(
    "MOVING SOLAR SYSTEM",
    cwidth / 2.0 - 90,
    cheight - 40
  )
}

// ==========================================
// ANIMATION
// ==========================================

animateWithCanvasDraw { canvas =>

  angle1 += 0.04
  angle2 += 0.025
  angle3 += 0.018
  angle4 += 0.012

  drawSpace(canvas)
}