private void ComputeAngularAccelerations(TrajectoryKinematics kinematics, CalibrationHelper calibrationHelper) { if (kinematics.Length <= 4) { PadAngularAccelerations(kinematics); return; } for (int i = 2; i < kinematics.Length - 2; i++) { double d1 = GetDisplacementAngle(kinematics, i - 1, i - 2); double d2 = GetDisplacementAngle(kinematics, i, i - 1); double d3 = GetDisplacementAngle(kinematics, i + 1, i); double d4 = GetDisplacementAngle(kinematics, i + 2, i + 1); float t02 = calibrationHelper.GetTime(2); float t24 = calibrationHelper.GetTime(2); float t13 = calibrationHelper.GetTime(2); float v1 = (float)((d1 + d2) / t02); float v2 = (float)((d3 + d4) / t24); float a = (float)((v2 - v1) / t13); kinematics.AngularAcceleration[i] = calibrationHelper.ConvertAngularAcceleration(a); } PadAngularAccelerations(kinematics); }
private void ComputeAcceleration(TimeSeriesCollection tsc, CalibrationHelper calibrationHelper) { if (tsc.Length <= 2) { PadAccelerations(tsc); return; } for (int i = 1; i < tsc.Length - 1; i++) { float v1 = velocities[i - 1]; float v2 = velocities[i + 1]; float t = calibrationHelper.GetTime(2); float alpha = (v2 - v1) / t; tsc[Kinematics.AngularAcceleration][i] = (double)calibrationHelper.ConvertAngularAcceleration(alpha); float at = radii[i] * alpha; tsc[Kinematics.TangentialAcceleration][i] = (double)calibrationHelper.ConvertAcceleration(at); float ac = radii[i] * velocities[i] * velocities[i]; tsc[Kinematics.CentripetalAcceleration][i] = (double)calibrationHelper.ConvertAcceleration(ac); float a = (float)Math.Sqrt(at * at + ac * ac); tsc[Kinematics.ResultantLinearAcceleration][i] = (double)calibrationHelper.ConvertAcceleration(a); } PadAccelerations(tsc); }