Commit | Line | Data |
---|---|---|
54425b14 | 1 | <!DOCTYPE html> |
6bef45dc DV |
2 | <html> |
3 | <head> | |
10494b48 | 4 | <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9"> |
6bef45dc DV |
5 | <title>dygraphs Equation Plotter</title> |
6 | <!--[if IE]> | |
a2b2c3a1 | 7 | <script type="text/javascript" src="../excanvas.js"></script> |
6bef45dc | 8 | <![endif]--> |
7e5ddc94 DV |
9 | <!-- |
10 | For production (minified) code, use: | |
11 | <script type="text/javascript" src="dygraph-combined.js"></script> | |
12 | --> | |
13 | <script type="text/javascript" src="../dygraph-dev.js"></script> | |
14 | ||
6bef45dc DV |
15 | <script type="text/javascript"> |
16 | function plot() { | |
17 | var eq = document.getElementById("eq").value; | |
18 | eval("fn = " + eq); | |
19 | ||
d16579a0 | 20 | var graph = document.getElementById("graph_div"); |
6bef45dc DV |
21 | var width = parseInt(graph.style.width); |
22 | var x1 = parseFloat(document.getElementById("x1").value); | |
23 | var x2 = parseFloat(document.getElementById("x2").value); | |
24 | var xs = 1.0 * (x2 - x1) / width; | |
25 | ||
26 | var data = []; | |
27 | for (var i = 0; i < width; i++) { | |
28 | var x = x1 + i * xs; | |
29 | var y = fn(x); | |
e82114b2 DV |
30 | var row = [x]; |
31 | if (y.length > 0) { | |
32 | for (var j = 0; j < y.length; j++) { | |
33 | row.push(y[j]); | |
34 | } | |
35 | } else { | |
36 | row.push(y); | |
37 | } | |
38 | data.push(row); | |
6bef45dc DV |
39 | } |
40 | ||
300c5ff0 DV |
41 | var labels = ['X']; |
42 | if (data[0].length == 2) { | |
43 | labels.push('Y'); | |
44 | } else { | |
6f8f19ef | 45 | for (var i = 1; i < data[0].length; i++) { |
300c5ff0 DV |
46 | labels.push('Y' + (1 + i)); |
47 | } | |
48 | } | |
49 | ||
50 | g = new Dygraph(graph, data, { | |
51 | labels: labels | |
52 | }); | |
e82114b2 DV |
53 | } |
54 | ||
55 | function preset() { | |
56 | var sel = document.getElementById("presets").selectedIndex; | |
57 | var id = document.getElementById("presets").options[sel].id; | |
58 | var presets = { | |
59 | 'id': [ -10, 10, 'function(x) {\n return x;\n}' ], | |
60 | 'sine': [ -10, 10, 'function(x) {\n return Math.sin(x);\n}' ], | |
61 | 'taylor': [ -3, 3, 'function(x) {\n return [Math.cos(x), 1 - x*x/2 + x*x*x*x/24];\n}' ], | |
62 | '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}' ] | |
63 | }; | |
64 | ||
65 | if (id == "custom") { return; } | |
66 | document.getElementById("x1").value = presets[id][0]; | |
67 | document.getElementById("x2").value = presets[id][1]; | |
68 | document.getElementById("eq").value = presets[id][2]; | |
69 | plot(); | |
6bef45dc DV |
70 | } |
71 | </script> | |
72 | </head> | |
e82114b2 | 73 | <body onload="preset()"> |
6bef45dc DV |
74 | <p><b>Equation: </b><br/> |
75 | <textarea cols="40" rows="10" id="eq">function(x) { | |
e82114b2 DV |
76 | return [0.1 * x, 0.1 * x + Math.sin(x), 0.1*x + Math.cos(x)]; |
77 | }</textarea><br/> | |
78 | <b>Preset functions:</b> <select id=presets onchange="preset()"> | |
79 | <option id=custom>(custom)</option> | |
80 | <option id=id>Identity</option> | |
81 | <option id=sine>Sine Wave</option> | |
82 | <option id=taylor>Taylor series</option> | |
83 | <option selected id=sawtooth>Sawtooth</option> | |
84 | </select> | |
6bef45dc | 85 | </p> |
e82114b2 | 86 | |
6bef45dc DV |
87 | <p><b>x range: </b> <input type=text width="5" id="x1" value="-10" /> |
88 | to <input type=text width="5" id="x2" value="10" /></p> | |
89 | <p><input type=button value="Plot" onClick="plot()" /></p> | |
90 | ||
d16579a0 | 91 | <div id="graph_div" style="width:1024px; height:400px;"></div> |
6bef45dc DV |
92 | </body> |
93 | </html> |