34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
onmessage = function(e) {
|
|
var calcArray = [];
|
|
var eq = e.data;
|
|
for(var i = 0; i < eq.length; i++) {
|
|
calcArray = calcEquation(eq[i]);
|
|
postMessage(.9+.1*((i+1)/eq.length));
|
|
postMessage(calcArray);
|
|
}
|
|
}
|
|
|
|
function calcEquation(cycleArray) {
|
|
var step = 1000;
|
|
/* x(t) and y(t) are in form
|
|
reCk * cos(kt) - imCk * sin(kt)
|
|
reCk * sin(kt) + imCk * cos(kt)
|
|
respectively.
|
|
*/
|
|
var keys = Object.keys(cycleArray[0]);
|
|
var calcArray = [];
|
|
calcArray.push(new Array(step).fill([cycleArray[0][0], cycleArray[1][0]]));
|
|
for(var i = 0; i < keys.length-1; i++) {
|
|
var num = ((i+1)%2===1) ? Math.ceil((i+1)/2) : -Math.floor((i+1)/2);
|
|
var cycloidPoints = [];
|
|
for(var j = 0; j < step; j++) {
|
|
var cycNum = num*2*Math.PI*j/step;
|
|
cycloidPoints.push([
|
|
cycleArray[0][num]*Math.cos(cycNum) - cycleArray[1][num]*Math.sin(cycNum),
|
|
cycleArray[0][num]*Math.sin(cycNum) + cycleArray[1][num]*Math.cos(cycNum)
|
|
]);
|
|
}
|
|
calcArray.push(calcArray[i].map((a,j)=>[a[0]+cycloidPoints[j][0], a[1]+cycloidPoints[j][1]]));
|
|
}
|
|
return calcArray;
|
|
} |