A start for drawing 'vector' images using Fourier series of functions of i
From 3Blue1Browns on Fourier series youtube.com/watch?v=r6sgwtcmz2k
Log in to post a comment.
function FourierSeries(series) { comp = series.pop(); return new FourierComponent(comp[0], comp[1], comp[2], series.length > 0? FourierSeries(series): null); } function FourierComponent(radius, phase, rotation, child = null) { this.r = radius; this.p = phase / (2 * Math.PI); this.o = rotation; this.c = child; } FourierComponent.prototype.transpose = function(i) { return ( this.o + ( (i / 3600) * (2 * Math.PI) ) ) / this.p; } FourierComponent.prototype.getX = function(i) { return (this.r * Math.cos( this.transpose(i) ) ) + (this.c === null? 0: this.c.getX(i)); } FourierComponent.prototype.getY = function(i) { return (this.r * Math.sin( this.transpose(i) ) ) + (this.c === null? 0: this.c.getY(i)); } FourierComponent.prototype.setChild = function(child) { this.c = child; return this; } function wait(ms) { var start = new Date().getTime(); do { var end = new Date().getTime(); } while(end < start + ms); } // You can find the Turtle API reference here: https://turtletoy.net/syntax Canvas.setpenopacity(.25); // Global code will be evaluated once. const turtle = new Turtle(); turtle.penup(); var fc = FourierSeries([ [70, Math.PI / 2, 0] , [20, Math.PI * 50, 0] , [5, Math.PI / 20, 0] , [1, Math.PI / 300, 0] ]); /*var fc = new FourierComponent(70, 2 * Math.PI, 0, new FourierComponent(20, Math.PI / 25, 0, new FourierComponent(5, Math.PI*2, 0, new FourierComponent(1, Math.PI*300, 0) ) ) ); */ // The walk function will be called until it returns false. function walk(i) { turtle.goto(fc.getX(i), fc.getY(i)); if(i == 0) { turtle.pendown(); } //wait(.1); return i < 360000 / 4; }