samples/logisticmap.js

changeset 0
b1a7da25b547
child 962
ac62e33a99b0
equal deleted inserted replaced
-1:000000000000 0:b1a7da25b547
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
37 if (!$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
43 var x = parseFloat(arguments[0]);
44 var R = parseFloat(arguments[1]);
45 var NUM_POINTS = arguments.length > 2? parseFloat(arguments[2]) : 20;
46
47 // Java classes used
48 var DoubleStream = Java.type('java.util.stream.DoubleStream');
49 var LineChart = Java.type("javafx.scene.chart.LineChart");
50 var NumberAxis = Java.type("javafx.scene.chart.NumberAxis");
51 var Scene = Java.type("javafx.scene.Scene");
52 var Stage = Java.type("javafx.stage.Stage");
53 var XYChart = Java.type("javafx.scene.chart.XYChart");
54
55 function 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 }

mercurial