Kinematic const newOffsetAngle = (offsetAngle + ((now - lastTime) / 1000) * RADIANS_PER_SECOND) % (2 * Math.PI); Terminology Crank Revolute Joint Useful Links https://css-tricks.com/using-requestanimationframe-with-react-hooks/