画一颗树

画一颗树_第1张图片

class RecursiveCallTree : Fragment() {
    override val root = group {
        val root1 = this
        val start = Point(400.0, 600.0)
        val level= intProperty()
        val levelList= listOf(1,3,5,10,15,20)
        hbox {
            button("draw tree") {
                action {
                    run {
                        drawTree(root1, start, 90.0, 10)
                    }
                }
            }
            combobox(level,levelList)
        }
    }

   fun drawTree(group: Group, p0: Point, angle: Double, level: Int) {
        if (level <= 0) {
            return
        }
        val destination = p0.getDestination(10F, angle, level)
        val line = Line(p0.x, p0.y, destination.x, destination.y)
        line.setStrokeWidth(level.toDouble())
        if (level > 7) {
            line.setStroke(Color.BROWN)
        } else if (level > 3) {
            line.setStroke(Color.GREEN)
        } else {
            line.setStroke(Color.LIMEGREEN)
        }
        group.add(line)
        drawTree(group, destination, angle - 20.0 - Math.random() * 10, level - 1)
        drawTree(group, destination, angle - 5, level - 1)
        drawTree(group, destination, angle + 20.0 + Math.random() * 20, level - 1)
    }
}

 

class Point(var x: Double=0.0,var y: Double=0.0) {
    fun getDestination(distance: Float, angle: Double, level: Int): Point {
        val p = Point()
        p.x = x + Math.cos(Math.toRadians(angle)) * level.toDouble() * distance.toDouble()
        p.y = y - Math.sin(Math.toRadians(angle)) * level.toDouble() * distance.toDouble()
        return p
    }
}

转载于:https://my.oschina.net/u/3820046/blog/3068375

你可能感兴趣的:(java)