Chaos game: Difference between revisions

Content added Content deleted
m (→‎{{header|REXX}}: used a template for the output section.)
(Added Groovy)
Line 1,055: Line 1,055:
}
}
return err
return err
}</lang>

=={{header|Groovy}}==

{{libheader|JavaFX}}

<lang Groovy>import javafx.animation.AnimationTimer
import javafx.application.Application
import javafx.scene.Scene
import javafx.scene.layout.Pane
import javafx.scene.paint.Color
import javafx.scene.shape.Circle
import javafx.stage.Stage

class ChaosGame extends Application {

final randomNumberGenerator = new Random()

@Override
void start(Stage primaryStage) {
primaryStage.title = 'Chaos Game'
primaryStage.scene = getScene()
primaryStage.show()
}

def getScene() {
def colors = [Color.RED, Color.GREEN, Color.BLUE]

final width = 640, height = 640, margin = 60
final size = width - 2 * margin

def points = [
new Circle(width / 2, margin, 1, colors[0]),
new Circle(margin, size, 1, colors[1]),
new Circle(margin + size, size, 1, colors[2])
]

def pane = new Pane()
pane.style = '-fx-background-color: black;'
points.each {
pane.children.add it
}

def currentPoint = new Circle().with {
centerX = randomNumberGenerator.nextInt(size - margin) + margin
centerY = randomNumberGenerator.nextInt(size - margin) + margin
it
}

({

def newPoint = generatePoint(currentPoint, points, colors)
pane.children.add newPoint
currentPoint = newPoint

} as AnimationTimer).start()

new Scene(pane, width, height)
}

def generatePoint(currentPoint, points, colors) {
def selection = randomNumberGenerator.nextInt 3
new Circle().with {
centerX = (currentPoint.centerX + points[selection].centerX) / 2
centerY = (currentPoint.centerY + points[selection].centerY) / 2
radius = 1
fill = colors[selection]
it
}
}

static main(args) {
launch(ChaosGame)
}
}</lang>
}</lang>