「プログラムでシダを描画する」を Kotlin (+ Processing) で描画する

  • 4
    Like
  • 0
    Comment
More than 1 year has passed since last update.

Kotlinを勉強したついでにシダを描画してみました。
また、描画するにあたってProcessingを用いました。1

元ネタ

時代遅れですが、Kotlinがなかったので。。。
内部的にはProcessingを使っていますが、許してください><

ソースコード

shida.kt
import processing.core.PApplet

data class vec2(val x: Float, val y: Float)

class ShidaApp: PApplet() {
    private val N = 20
    private val scale = 600f

    override fun settings() {
        size(600, 600, P2D)
    }

    override fun setup() {
        background(255)
        stroke(0f, 128f, 0f)
        rec(N, vec2(0f, 0f))
    }

    fun f1(v: vec2): vec2 = vec2(0.836f * v.x + 0.044f * v.y, -0.044f * v.x + 0.836f * v.y + 0.169f)
    fun f2(v: vec2): vec2 = vec2(-0.141f * v.x + 0.302f * v.y, 0.302f * v.x + 0.141f * v.y + 0.127f)
    fun f3(v: vec2): vec2 = vec2(0.141f * v.x - 0.302f * v.y, 0.302f * v.x + 0.141f * v.y + 0.169f)
    fun f4(v: vec2): vec2 = vec2(0f, 0.175337f * v.y)

    fun rec(i: Int, v: vec2) {
        if (i > 0) {
            rec(i - 1, f1(v))
            if (random(3f) < 1f) rec(i - 1, f2(v))
            if (random(3f) < 1f) rec(i - 1, f3(v))
            if (random(3f) < 1f) rec(i - 1, f4(v))
        } else {
            point(width / 2f + v.x * scale, height - v.y * scale)
        }
    }

    fun run(args: Array<String>) = main("ShidaApp")
}

fun main(args : Array<String>) = ShidaApp().run(args)

画像

shida.png