# Problem rotating a cube with quaternions using lerp

I’m trying to rotate a cube 90 degrees. My script was working until I started to simplify it I’ve starred myself blind as to why it’s not working anymore. The cube just rotates a tiny bit and then starts jittering in its rotating movement.

``````    const float ROTATION_SPEED = 4.0f;

Quaternion _sourceRotation;
Quaternion _targetRotation;

void Start () {
_sourceRotation = this.transform.rotation;
_targetRotation = this.transform.rotation;
}

void Update () {

float angle = Quaternion.Angle(this.transform.rotation, _targetRotation);
if (angle < 0.1f) {
_sourceRotation = _targetRotation;
_targetRotation = this.transform.rotation * Quaternion.Euler(90, 0, 0); //a random rotation will be chosen here, but hardcoded right now for simplicity
}

this.transform.rotation = Quaternion.Lerp(_sourceRotation, _targetRotation, Time.deltaTime * ROTATION_SPEED);
}
``````

If I change _sourceRotation to a Transform instead of a Quaternion and store the cubes transform instead or its rotation in _sourceRotation, and in the Quaternion.Lerp use _source.rotation it does the rotation as it should, but I don’t understand why… feeling frustrated

That’s because Lerp doesn’t work the way you are using it. It interpolates from the first rotation to the second rotation while t == 0 is the first and t == 1 the second rotation value. Assume Time.deltaTime stays constant at 0.05 then t will always be 0.05*4 = 0.2. That’s 20% the first and 80% the second rotation, that’s where the jitter comes from, slightly different deltaTime every frame.

Create another float, use it as t, and add the Time.deltaTime * ROTATION_SPEED to it.
Whenever you reach your target, reset it to 0.