logisticmap.js revision 802:235d22ccfd24
1#// Usage: jjs -fx -scripting logisticmap.js -- <initial_x> <R>
2
3/*
4 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 *   - Redistributions of source code must retain the above copyright
11 *     notice, this list of conditions and the following disclaimer.
12 *
13 *   - Redistributions in binary form must reproduce the above copyright
14 *     notice, this list of conditions and the following disclaimer in the
15 *     documentation and/or other materials provided with the distribution.
16 *
17 *   - Neither the name of Oracle nor the names of its
18 *     contributors may be used to endorse or promote products derived
19 *     from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
22 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
25 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34// Logistic map viewer using Java8 Streams and JavaFX
35// See also http://en.wikipedia.org/wiki/Logistic_map
36
37if (!$OPTIONS._fx || arguments.length < 2) {
38    print("Usage: jjs -fx -scripting logisticmap.js -- <initial_x> <R>");
39    exit(1);
40}
41
42// parameters for the logistic map
43var x = parseFloat(arguments[0]);
44var R = parseFloat(arguments[1]);
45var NUM_POINTS = arguments.length > 2? parseFloat(arguments[2]) : 20;
46
47// Java classes used
48var DoubleStream = Java.type('java.util.stream.DoubleStream');
49var LineChart = Java.type("javafx.scene.chart.LineChart");
50var NumberAxis = Java.type("javafx.scene.chart.NumberAxis");
51var Scene = Java.type("javafx.scene.Scene");
52var Stage = Java.type("javafx.stage.Stage");
53var XYChart = Java.type("javafx.scene.chart.XYChart");
54
55function start(stage) {
56    stage.title = "Logistic Map: initial x = ${x}, R = ${R}";
57    // make chart
58    var xAxis = new NumberAxis();
59    var yAxis = new NumberAxis();
60    var lineChart = new LineChart(xAxis, yAxis);
61    xAxis.setLabel("iteration");
62    yAxis.setLabel("x");
63    // make chart data series
64    var series = new XYChart.Series();
65    var data = series.data;
66    // populate data using logistic iteration
67    var i = 0;
68    DoubleStream
69        .generate(function() x = R*x*(1-x))
70        .limit(NUM_POINTS)
71        .forEach(
72            function(value) {
73                data.add(new XYChart.Data(i, value));
74                i++;
75            }
76         );
77    // add to stage
78    var scene = new Scene(lineChart, 800, 600);
79    lineChart.data.add(series);
80    stage.scene = scene;
81    stage.show();
82}
83