Skip to content

Instantly share code, notes, and snippets.

@giseburt
Forked from ril3y/WreckingBall.js
Last active August 29, 2015 14:06
Show Gist options
  • Save giseburt/7d54b169a5f3b8b66d78 to your computer and use it in GitHub Desktop.
Save giseburt/7d54b169a5f3b8b66d78 to your computer and use it in GitHub Desktop.
var calcPen = function(zLen){
//Pendulum Movement Equation
//T = 2pi*SQRT(L/g)
var twoPi = 6.2831926
var gravity = 9.8
var result = twoPi * Math.sqrt(zLen / gravity);
return(result.toFixed(4))
}
exports.calcVelocity = function(xyLen, jerk, zLen){
// V = 1 / 3 (3T j v_1 - 3D j - v_1 sqrt(j v_1) sqrt(sqrt(3) 30)) / j
// V' = 1 / 3 (-sqrt(j v_1) sqrt(sqrt(3) 30) - 1 / 2 j v_1 sqrt(sqrt(3) 30) / sqrt(j v_1) + 3T j) / j
var jerk = jerk*1000000;
var pendulumPeriod = calcPen(zLen/100);
var sqrt_three_thirty = Math.sqrt(Math.sqrt(3)*30);
// Guess xyLen/pendulumPeriod, which will get the loop started
var v_1 = xyLen/pendulumPeriod;
// The previous guess -- lets start it way off
var v_1_previous = v_1-100;
console.log("v_1: "+ v_1);
while (Math.abs(v_1 - v_1_previous) > VELOCITY_ACCURACY) {
v_1_previous = v_1;
// V = (3*T*j*v_1 - 3*D*j - v_1*sqrt(j*v_1)*sqrt_three_thirty) / 3*j
// V' = (-sqrt(j*v_1)*sqrt_three_thirty - (j*v_1*sqrt_three_thirty)/(2*sqrt(j*v_1)) + 3*T*j) / 3*j
var sqrt_j_v = Math.sqrt(jerk*v_1);
// V = (3*T*j*v_1 - 3*D*j - v_1*sqrt_j_v*sqrt_three_thirty) / 3*j
// V' = (-sqrt_j_v*sqrt_three_thirty - (j*v_1*sqrt_three_thirty)/(2*sqrt_j_v) + 3*T*j) / 3*j
var F_v_1 = (3*pendulumPeriod*jerk*v_1 - 3*xyLen*jerk - v_1*sqrt_j_v*sqrt_three_thirty) / 3*jerk;
var Fd_v_1 = (-sqrt_j_v*sqrt_three_thirty - (jerk*v_1*sqrt_three_thirty)/(2*sqrt_j_v) + 3*pendulumPeriod*jerk) / 3*jerk;
v_1 = v_1 - (F_v_1/Fd_v_1);
console.log("v_1: "+ v_1.toFixed(4) + " F_v_1: " + F_v_1.toFixed(4) + " Fd_v_1: " + Fd_v_1.toFixed(4));
}
return v_1*60;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment