/** * Compute acceleration. Takes into account averaging, nv-reset, etc. * If the velocity has changed, an average is taken of 6 velocity factors: * current velocity, last velocity and 4 times the average between the two. */ static double ComputeAcceleration(DeviceIntPtr dev, DeviceVelocityPtr vel, double threshold, double acc) { double result; if (vel->velocity <= 0) { DebugAccelF("profile skipped\n"); /* * If we have no idea about device velocity, don't pretend it. */ return 1; } if (vel->average_accel && vel->velocity != vel->last_velocity) { /* use simpson's rule to average acceleration between * current and previous velocity. * Though being the more natural choice, it causes a minor delay * in comparison, so it can be disabled. */ result = BasicComputeAcceleration(dev, vel, vel->velocity, threshold, acc); result += BasicComputeAcceleration(dev, vel, vel->last_velocity, threshold, acc); result += 4.0f * BasicComputeAcceleration(dev, vel, (vel->last_velocity + vel->velocity) / 2, threshold, acc); result /= 6.0f; DebugAccelF("profile average [%.2f ... %.2f] is %.3f\n", vel->velocity, vel->last_velocity, result); } else { result = BasicComputeAcceleration(dev, vel, vel->velocity, threshold, acc); DebugAccelF("profile sample [%.2f] is %.3f\n", vel->velocity, result); } return result; }
/** * Compute acceleration. Takes into account averaging, nv-reset, etc. */ static float ComputeAcceleration( DeviceVelocityPtr vel, float threshold, float acc){ float res; if(vel->last_reset){ DebugAccelF("(dix ptracc) profile skipped\n"); /* * This is intended to override the first estimate of a stroke, * which is too low (see ProcessVelocityData). 1 should make sure * the mickey is seen on screen. */ return 1; } if(vel->average_accel && vel->velocity != vel->last_velocity){ /* use simpson's rule to average acceleration between * current and previous velocity. * Though being the more natural choice, it causes a minor delay * in comparison, so it can be disabled. */ res = BasicComputeAcceleration(vel, vel->velocity, threshold, acc); res += BasicComputeAcceleration(vel, vel->last_velocity, threshold, acc); res += 4.0f * BasicComputeAcceleration(vel, (vel->last_velocity + vel->velocity) / 2, threshold, acc); res /= 6.0f; DebugAccelF("(dix ptracc) profile average [%.2f ... %.2f] is %.3f\n", vel->velocity, vel->last_velocity, res); return res; }else{ res = BasicComputeAcceleration(vel, vel->velocity, threshold, acc); DebugAccelF("(dix ptracc) profile sample [%.2f] is %.3f\n", vel->velocity, res); return res; } }