1 /*global Gallery,Dygraph,data */
7 name
: 'Function Plotter',
8 title
: 'Define your data with functions',
9 setup
: function(parent
) {
11 "<p><b>Equation: </b><br/>",
12 "<textarea cols='80' rows='10' id='eq'>function(x) {",
13 " return [0.1 * x, 0.1 * x + Math.sin(x), 0.1*x + Math.cos(x)];",
15 "<b>Preset functions:</b> <select id='presets'>",
16 "<option selected id='custom'>(custom)</option>",
17 "<option id='id'>Identity</option>",
18 "<option id='sine'>Sine Wave</option>",
19 "<option id='taylor'>Taylor series</option>",
20 "<option id='sawtooth'>Sawtooth</option>",
24 "<p><b>x range: </b> <input type='text' width='5' id='x1' value='-10' />",
25 "to <input type='text' width='5' id='x2' value='10' /></p>",
26 "<p><button id='plot'>Plot</button></p>",
28 "<div id='graph_div' style='width:600px; height:300px;'></div>"].join("\n");
32 var plot
; // defined below
33 var select
= document
.getElementById("presets");
35 'id': [ -10, 10, 'function(x) {\n return x;\n}' ],
36 'sine': [ -10, 10, 'function(x) {\n return Math.sin(x);\n}' ],
37 'taylor': [ -3, 3, 'function(x) {\n return [Math.cos(x), 1 - x*x/2 + x*x*x*x/24];\n}' ],
38 'sawtooth': [-10, 10, 'function(x) {\n var y = 0;\n for (var i = 1; i < 20; i+=2) {\n y += Math.sin(i * x)/i;\n }\n var final = 1 - 2*(Math.abs(Math.floor(x / Math.PI)) % 2);\n return [4/Math.PI * y, final];\n}' ]
40 select
.onchange
= function() {
41 var sel
= select
.selectedIndex
;
42 var id
= select
.options
[sel
].id
;
44 if (id
== "custom") { return; }
45 document
.getElementById("x1").value
= presets
[id
][0];
46 document
.getElementById("x2").value
= presets
[id
][1];
47 document
.getElementById("eq").value
= presets
[id
][2];
51 var plotButton
= document
.getElementById("plot");
53 var eq
= document
.getElementById("eq").value
;
56 var graph
= document
.getElementById("graph_div");
57 var width
= parseInt(graph
.style
.width
, 10);
58 var x1
= parseFloat(document
.getElementById("x1").value
);
59 var x2
= parseFloat(document
.getElementById("x2").value
);
60 var xs
= 1.0 * (x2
- x1
) / width
;
63 for (var i
= 0; i
< width
; i
++) {
68 for (var j
= 0; j
< y
.length
; j
++) {
77 new Dygraph(graph
, data
);
79 plotButton
.onclick
= plot
;