<head>
<script>
var canvas;
- var context;
+ var ctx;
var ww;
var wh;
+ var hmax = 0;
+ var hfact;
var tmin;
var tmax;
- function drawplot(times, color) {
- var tfact = ww / (tmax - tmin);
- var i;
- var height = [];
- var hmax = 0;
- var hfact;
+ var tfact;
+ var xzero = 20;
+ var yzero = 20;
+ function px(x) {
+ return xzero + ((x - tmin) * tfact);
+ }
+ function py(y) {
+ return wh - yzero - (y * hfact);
+ }
+ function xaxis() {
+ ctx.beginPath();
+ ctx.moveTo(px(tmin), py(0));
+ ctx.lineTo(px(tmax), py(0));
+ ctx.strokeStyle = "black";
+ ctx.stroke();
+ }
+ function yaxis() {
+ ctx.beginPath();
+ ctx.moveTo(px(tmin), py(0));
+ ctx.lineTo(px(tmin), py(hmax));
+ ctx.strokeStyle = "black";
+ ctx.stroke();
+ }
+ function differentiate(times) { /* updates glbal hmax */
+ var res = [];
+ var dv, dt, v;
- for (i = 1; i < times.length; i++) {
- height[i] = 1 / (times[i][0] - times[i-1][0]);
- if (hmax < height[i]) hmax = height[i];
+ for (i = 0; i < times.length - 1; i++) {
+ dv = times[i+1][1] - times[i][1];
+ dt = times[i+1][0] - times[i][0];
+ if (dt != 0 && dv != 0) {
+ v = dv / dt;
+ if (hmax < v) hmax = v;
+ res.push([times[i][0], v]);
+ }
}
- height[i+1] = height[i];
- hfact = wh / hmax;
- context.beginPath();
- context.moveTo(0, wh - height[1]*hfact);
- for (i = 1; i < times.length; i++) {
- context.lineTo((times[i][0] - tmin)*tfact,wh - height[i]*hfact);
- context.lineTo((times[i][0] - tmin)*tfact,wh - height[i+1]*hfact);
+ res.push([times[i][0], v]);
+
+ return res;
+ }
+ function drawplot(data, color) {
+ var i;
+
+ ctx.beginPath();
+ ctx.moveTo(px(data[0][0]), py(data[0][1]));
+ for (i = 1; i < data.length; i++) {
+ ctx.lineTo(px(data[i][0]), py(data[i - 1][1]));
+ ctx.lineTo(px(data[i][0]), py(data[i][1]));
}
- context.strokeStyle = color;
- context.stroke();
+ ctx.strokeStyle = color;
+ ctx.stroke();
}
function gotdata(data) {
+ var cold_d = [], hot_d = [];
+
+ document.getElementById("cold").innerHTML =
+ (data.current.cold / 100).toFixed(2);
+ document.getElementById("hot").innerHTML =
+ (data.current.hot / 100).toFixed(2);
canvas = document.getElementById("plot");
- context = canvas.getContext("2d");
- ww = canvas.offsetWidth;
- wh = canvas.offsetHeight;
+
+ ctx = canvas.getContext("2d");
+ ww = canvas.width;
+ wh = canvas.height;
+
tmin = data.range.lo;
tmax = data.range.hi;
- document.getElementById("cold").innerHTML = data.current.cold;
- document.getElementById("hot").innerHTML = data.current.hot;
- drawplot(data.cold, "blue");
- drawplot(data.hot, "red");
+ tfact = (ww - xzero) / (tmax - tmin);
+ cold_d = differentiate(data.cold);
+ hot_d = differentiate(data.hot);
+ /* differetiate() updates hmax */
+ hfact = (wh - yzero) / hmax;
+
+ document.getElementById("debug").innerHTML.append("<br>" ++ cold_d + "<br>" + hot_d);
+
+ drawplot(cold_d, "blue");
+ drawplot(hot_d, "red");
+ xaxis();
+ yaxis();
}
</script>
<style>
text-align: center;
}
br {
- clear: all;
+ clear: both;
}
div#currentvals {
- width: 16em;
+ width: 14em;
margin-left: auto;
margin-right: auto;
+ margin-bottom: 10px;
text-align: center;
font-size: 150%;
}
position: relative;
padding: 0.2em;
border: solid 1px black;
- margin: 1em;
+ margin: 0.2em;
}
div#cold {
float: left;
background-color: #ffd0e0;
}
canvas#plot {
+ padding-left: 0;
+ padding-right: 0;
margin-left: auto;
margin-right: auto;
+ display: block;
+ width: 640px;
+ height: 320px;
border: solid 1px black;
}
</style>
<div class="current" id="hot">hot</div>
</div>
<br />
-<canvas id="plot" width="640" height = "480"></canvas>
+<canvas id="plot" width="640" height = "320"></canvas>
<br />
<div id=debug>
</div>
<script>
var xmlhttp = new XMLHttpRequest();
var url = "query.cgi";
+ var qstr = "?lo=2015-12-19+00:00:00&hi=2015-12-20+00:00:00";
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
gotdata(myData);
}
}
- xmlhttp.open("GET", url, true);
+ xmlhttp.open("GET", url+qstr, true);
xmlhttp.send();
</script>
</body>