Bezier

A Bézier Curve

import coracle.Drawing
import coracle.random
import coracle.shapes.Bezier
import coracle.shapes.Line
import coracle.shapes.Point

class ReferenceBezier: Drawing() {

    private val w = 450
    private val h = 450
    private val agent1A = Agent()
    private val agent1B = Agent()
    private val agent2A = Agent()
    private val agent2B = Agent()

    val line1 = Line()
    val line2 = Line()

    override fun setup() {
        size(w, h)
    }

    override fun draw() {
        background(0xf5f2f0)

        line1.update(agent1A, agent1B)
        line2.update(agent2A, agent2B)

        stroke(0x88cc99)
        line1.draw()
        line2.draw()

        agent1A.move()
        agent1B.move()
        agent2A.move()
        agent2B.move()

        val bezier = Bezier(agent1A, agent1B, agent2A, agent2B, 25)
        stroke(0xcc9988)
        bezier.draw()
    }

    inner class Agent: Point() {

        private var xDirection = 1
        private var yDirection = 1

        init {
            x = random(w)
            y = random(h)

            xDirection = when {
                random(100) > 50 -> 1
                else -> -1
            }

            yDirection = when {
                random(100) > 50 -> 1
                else -> -1
            }
        }

        fun move(){
            when {
                x > width || x < 0 -> xDirection *= -1
            }
            when {
                y > height || y < 0 -> yDirection *= -1
            }

            x += (2 * xDirection)
            y += (2 * yDirection)
        }
    }
}