Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn calculate_angular_acceleration(&self, dt: f64) -> Vector3 {
- println!("---");
- let orientation = get_next_orientation(self.orientation, self.angular_velocity, dt * 3.0);
- let delta_q = self.requested_orientation * orientation.get_inverse();
- let delta_angle = delta_q.angle();
- // we will attempt to accelerate or decelerate on this axis
- let accel_axis = delta_q.axis();
- let angular_velocity = self.angular_velocity.len();
- // self.angular_velocity.projection_on_vector3(accel_axis);
- //
- let deaccel_angle = angular_velocity.powi(2) / (2.0 * self.max_angular_acceleration);
- println!(
- "delta_angle: {:?}, deaccel_angle: {:?}, angular velocity: {:?}, accel_axis: {:?}",
- delta_angle, deaccel_angle, angular_velocity, accel_axis
- );
- if delta_angle <= angular_velocity {
- // Remove all angular velocity
- let result = self.angular_velocity.get_normalized()
- * -f64::min(self.max_angular_acceleration, delta_angle / dt);
- println!("Near the end: {:?}", result);
- return result;
- }
- let result = accel_axis
- * if delta_angle > deaccel_angle + angular_velocity * dt {
- self.max_angular_acceleration
- } else {
- -self.max_angular_acceleration
- };
- println!("angular_acceleration: {:?}", result);
- result
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement