summaryrefslogtreecommitdiff
path: root/js/complexfunctions.js
diff options
context:
space:
mode:
authorpommicket <leonardomtenenbaum@gmail.com>2016-10-16 15:54:48 -0400
committerpommicket <leonardomtenenbaum@gmail.com>2016-10-16 15:54:48 -0400
commit9b477c4c5d298ae32cb10a3be947b5525348324b (patch)
tree64ce285bd85691ff31bdf6e4c1afee46ce5bcaa0 /js/complexfunctions.js
parent5f8337921b775d9262822deab39a23eab6e5146d (diff)
Added log, multiple functions & width/height control to RPN.
Diffstat (limited to 'js/complexfunctions.js')
-rw-r--r--js/complexfunctions.js70
1 files changed, 50 insertions, 20 deletions
diff --git a/js/complexfunctions.js b/js/complexfunctions.js
index fce70a6..f71c23b 100644
--- a/js/complexfunctions.js
+++ b/js/complexfunctions.js
@@ -3,30 +3,52 @@ var rangePoints;
var animating = false;
var t = 0;
var SCALE = 5;
+var nFunctions;
+var colors;
function drawPoints(points)
{
background(255);
for (var i = 0; i < points.length; i++)
{
- point((points[i][0]/SCALE+0.5)*width, (points[i][1]/SCALE+0.5)*height);
+ point((points[i][0]/(SCALE*width/750)+0.5)*width, (points[i][1]/(SCALE*height/750)+0.5)*height);
}
}
+function drawManyPoints(points)
+{
+ background(255);
+ for (var f = 0; f < nFunctions; f++)
+ {
+ stroke(colors[f][0], colors[f][1], colors[f][2]);
+ for (var i = 0; i < points[f].length; i++)
+ {
+ point((points[f][i][0]/SCALE+0.5)*width, (points[f][i][1]/SCALE+0.5)*height);
+ }
+ }
+}
-function mapFunc(func)
+
+function mapFuncs(funcs)
{
- var f = complex.rpn(func);
+ var fs = funcs.map(complex.rpn);
rangePoints = [];
- for (var i = 0; i < domainPoints.length; i++)
+ var f;
+ for (var i = 0; i < funcs.length; i++)
{
- rangePoints.push(f(domainPoints[i]));
+ rangePoints.push([]);
+ f = fs[i];
+ for (var j = 0; j < domainPoints.length; j++)
+ {
+ rangePoints[i].push(f(domainPoints[j]));
+ }
}
+ nFunctions = fs.length;
}
-function drawFunc(func)
+function drawFuncs(funcs)
{
- mapFunc(func);
+ mapFuncs(funcs);
animating = true;
}
@@ -36,49 +58,57 @@ function draw()
if (animating)
{
var midpoints = [];
- for (var i = 0; i < domainPoints.length; i++)
- midpoints.push(complex.add(complex.mult(domainPoints[i], complex.reToC(1-t)), complex.mult(rangePoints[i], complex.reToC(t))));
-
- drawPoints(midpoints);
+ for (var f = 0; f < nFunctions; f++)
+ {
+ midpoints.push([]);
+ for (var i = 0; i < domainPoints.length; i++)
+ midpoints[f].push(complex.add(complex.mult(domainPoints[i], complex.reToC(1-t)), complex.mult(rangePoints[f][i], complex.reToC(t))));
+ }
+ drawManyPoints(midpoints);
t += 0.01;
if (t >= 1)
{
animating = false;
- drawPoints(rangePoints);
+ drawManyPoints(rangePoints);
}
}
}
-function setup()
+function makeCanvas(w, h)
{
- var canvas = createCanvas(750, 750);
+ $("#canvas").html();
+ var canvas = createCanvas(w, h);
canvas.parent("canvas");
- stroke(0,0,100);
domainPoints = [];
for (var i = 10; i < width; i += 50)
{
for (var j = 0; j < height; j++)
{
- domainPoints.push([(j/width-0.5)*SCALE, (i/height-0.5)*SCALE]);
- domainPoints.push([(i/width-0.5)*SCALE, (j/height-0.5)*SCALE]);
+ domainPoints.push([(j/width-0.5)*SCALE*width/750, (i/height-0.5)*SCALE*height/750]);
+ domainPoints.push([(i/width-0.5)*SCALE*width/750, (j/height-0.5)*SCALE*height/750]);
}
}
drawPoints(domainPoints);
}
+
$(function()
{
$("#animate").click(function()
{
+ makeCanvas(parseInt($("#width").val()), parseInt($("#height").val()));
t = 0;
animating = false;
- var func = $("#function").val();
- drawFunc(func);
+ var funcs = $("#function").val().split(",");
+ colors = [];
+ for (var i = 0; i < funcs.length; i++)
+ colors.push([Math.random() * 255, Math.random() * 255, Math.random() * 255]);
+ drawFuncs(funcs);
});
- $("#function").keydown(function(e)
+ $(".form-control").keydown(function(e)
{
if (e.keyCode == 13)
$("#animate").click();