/* Vector3 SteeringVehicle::predictFuturePosition(const float predictionTime) const { //return position() +(velocity() * predictionTime); return getVelocity() * predictionTime; } */ Vector3 SteeringVehicle::adjustRawSteeringForce(const Vector3& force) { const float maxAdjustedSpeed = 0.2f * getMaxSpeed(); if ((getSpeed() > maxAdjustedSpeed) ||(force == Vector3::ZERO)) { return force; } else { const float range = getSpeed() / maxAdjustedSpeed; // const float cosine = interpolate(pow(range, 6), 1.0f, -1.0f); // const float cosine = interpolate(pow(range, 10), 1.0f, -1.0f); // const float cosine = interpolate(pow(range, 20), 1.0f, -1.0f); // const float cosine = interpolate(pow(range, 100), 1.0f, -1.0f); // const float cosine = interpolate(pow(range, 50), 1.0f, -1.0f); const float cosine = interpolate(pow(range, 20), 1.0f, -1.0f); return limitMaxDeviationAngle(force, cosine, getForward()); } }
OpenSteer::Vec3 OpenSteer::SimpleVehicle::adjustRawSteeringForce (const Vec3& force, const float /* deltaTime */) { const float maxAdjustedSpeed = 0.2f * maxSpeed (); if ((speed () > maxAdjustedSpeed) || (force == Vec3::zero)) { return force; } else { const float range = speed() / maxAdjustedSpeed; // const float cosine = interpolate (pow (range, 6), 1.0f, -1.0f); // const float cosine = interpolate (pow (range, 10), 1.0f, -1.0f); // const float cosine = interpolate (pow (range, 20), 1.0f, -1.0f); // const float cosine = interpolate (pow (range, 100), 1.0f, -1.0f); // const float cosine = interpolate (pow (range, 50), 1.0f, -1.0f); const float cosine = interpolate (pow (range, 20), 1.0f, -1.0f); return limitMaxDeviationAngle (force, cosine, forward()); } }