diff --git a/content/content.md b/content/content.md index 6859af4..81552e0 100644 --- a/content/content.md +++ b/content/content.md @@ -137,7 +137,12 @@ All this applies to any drawing, really! Now it’s your chance to play around w

Draw here!

- +
+ + + + +
diff --git a/js/controller/epicycles-controller.js b/js/controller/epicycles-controller.js index 4ce9d22..2ff5349 100644 --- a/js/controller/epicycles-controller.js +++ b/js/controller/epicycles-controller.js @@ -39,7 +39,8 @@ export default class EpicyclesController extends CanvasController { // Get the fourier data, also filter out the really small terms. this.fourierData = getFourierData(resample2dData(path, this.numPoints)).filter(f => f.amplitude > minAmplitude); this.fourierData.sort((a, b) => b.amplitude - a.amplitude); - console.log(this.fourierData.length + '/' + numPoints) + console.log(this.fourierData.length + '/' + numPoints); + this.jsonData(); } setFourierAmt(amt) { @@ -60,6 +61,7 @@ export default class EpicyclesController extends CanvasController { if (this.pathDirty) { this.recalculatePath(); this.pathDirty = false; + this.jsonData(); } if (!this.animate) { @@ -161,5 +163,15 @@ export default class EpicyclesController extends CanvasController { } this.context.globalAlpha = 1; } + jsonData() { + const numFouriers = Math.round(slurp(2, this.fourierData.length, this.fourierAmt)); + let frequency = [], phase = [], amplitude = []; + for (let i = 0; i < numFouriers; i++) { + frequency.push(this.fourierData[i].freq); + phase.push(this.fourierData[i].phase); + amplitude.push(this.fourierData[i].amplitude); + } + this.data = {"amplitude": amplitude, "phase":phase, "frequency":frequency}; + } } diff --git a/js/main.js b/js/main.js index 2945da1..15b5e8e 100644 --- a/js/main.js +++ b/js/main.js @@ -251,6 +251,17 @@ function init() { if (circleZoneSlider) { circleZoneSlider.onValueChange.push(val => epicycles.setFourierAmt(val)); } + if (hasElement('circle-zone-download-button')) { + const downloadButton = document.getElementById('circle-zone-download-button'); + downloadButton.addEventListener('click', () => { + epicycles.jsonData(); + var jsonData = "data:text/json;charset=utf-8,"+JSON.stringify(epicycles.data); + var downloadElem = document.getElementById('download-elem'); + downloadElem.setAttribute("href", jsonData); + downloadElem.setAttribute("download", "fourier-data.json"); + // console.log(jsonData); + }); + } controllers.push(epicycles); }