Rigid Body Motion Game Physics • “Linear physics”– physics of points – particle systems, ballistic motion… – key simplification: no orientation • “Rotational physics” – orientation can change Rigid Bodies No longer points: distribution of mass instead. Rigid bodies: distances between mass elements never change. Orientation of body can change over time. Rigid Body Translation • Can treat translational motion of rigid bodies exactly the same as points • Single position (position of center of mass) • F=ma (external forces) • v = ∫a dt • x = ∫v dt • momentum conservation Rotation • Rigid bodies also have orientation • Treating rotation properly is complicated • Rotation is not a vector (rotations do not commute, i.e., order of rotations matters) • No analog to x, v, a in rotations? Angular velocity • Infinitesimally small rotations do commute • Suppose we have a rigid body rotating about an axis • Can use a notion of angular velocity: • ω = dθ/dt Angular velocity • Connection between linear and angular velocity • Magnitudes: v = ωrperp • Want vector relation • Nice to have angular velocity about axis of rotation (so it doesn't have to change all the time for an object spinning in place) • Let v = ω x r Angular velocity • v=ωxr • Or, ω = r x v / |r|2 • Note: ω, r, v vectors • Angular velocity defined this way so that constant angular velocity behaves sensibly – spinning top has constant ω Applying force • What happens when you push on a spinning object? (exert force) • F=ma, so we know the movement of the centre of mass • How does the force affect orientation? Torque • T=rxF • r is vector from origin to location where force applied – for convenience, often take origin to be center of mass of object • F is force • Magnitude proportional to force, proportional to distance from origin Intuition for Torque • Larger the larger from the centre • Lever action: small force yields equivalent torque far from fulcrum Direction of Torque • T=rxF • Perpendicular to both location and force vectors • Direction is along axis about which rotation is induced • Right hand rule: thumb along axis, fingers curl in direction of rotation single particle • • • • • • T = r F sinθ T = r Ft Ft = mat = mrα T = mr2α Let I = mr2 T = Iα Many particles • Real objects are (pretty much) continuous • Game objects: distribution of point masses – not always, but common • Can get reasonable behaviour with (e.g.) four point masses per rigid body • Single orientation for body • Single centre of mass (of course) Changing Coordinate Systems • We dealt with changing coordinate systems all the time before • Rigid bodies are much simpler if we treat them in a natural coordinate system – origin at the centre of mass of the body – or, some other sensible origin: hinge of door • Need to transform forces into body coordinate system to calculate torque • Transform motion back to world space Angular momentum • Define angular momentum similarly to torque: • L=rxp • Note that with this definition, T = dL/dt, just as F = dp/dt Force and Torque • Note: a force is a force and a torque • Moves body linearly: F=ma, changes linear momentum • Rotates body: produces torque, changes angular momentum Linear vs. Angular linear quantity angular quantity velocity v angular velocity ω acceleration a angular acc. α mass m moment of inertia I p = mv L = Iω F = ma T = Iα Conservation of Angular Momentum • Consequence of T = dL/dt: – If net torque is zero, angular momentum is unchanged • Responsible for gyroscopes' unintuitive behaviour The gyroscope is tipped over but it doesn’t fall Moment of Inertia • Said that moment of inertia of a point particle is mr^2 • In the general case, I = ∫ ρ r^2 dV where r is the distance perpendicular to the axis of rotation • Don't know the axis of rotation beforehand Moment of Inertia • I = ∫ρ(x,y,z) y^2 + z^2 -xy dxdydz -xz -xy x^2 + z^2 -yz -xz -yz x^2+y^2 Diagonalized Moment of Inertia • Luckily, we can choose axes (principal axes of the body) so that the matrix simplifies: Ixx 0 • I= 0 0 Iyy 0 0 0 Izz • where, e.g., Ixx = m(y*y + z*z) • Off-diagonal entries called "products of inertia" Avoiding products of inertia • Do calculations in inertial reference frame whose axes line up with the principal axes of your object • Transform the results into worldspace • Moment of inertia of a body fixed, so can be precomputed and used at run-time Moment of Inertia • In general, the more compact a body is, the smaller the moments of inertia, and the faster it will spin (for the same torque) Fake I • Not doing engineering simulation (prediction of how real objects will behave) • Can invent I rather than integrating • Large values: hard to rotate about this axis • Avoid off-diagonal elements Fake constants • For that matter, can fake lots of stuff • Different gravity for different objects – e.g., slow bullets in FPS – e.g., fast falling in platformer • fake forces, approximate bounding geometry Case in 2D • In 2D, the vectors T, ω, α become scalars (their direction is known – only magnitude is needed) • Moment of inertia becomes a scalar too: • I = ∫prdA Single planar rigid body • state contains x, y, θ, vx, vy, ω • Have – F = ma (2 equations) – T = Iω – x = ∫vx dt – y = ∫vy dt – θ = ∫ω dt • Integrate to obtain new state, and proceed Rigid body in 3D • Need some way to represent general orientation • Need to be able to compose changes in orientation efficiently Quaternions • Quaternion: structure for representing rotation – unit vector (axis of rotation) – scalar (amount of rotation) – recall, store (cos(θ/2), v sin(θ/2) ) • Can represent orientation as quaternion, by interpreting as rotation from canonical position Quaternions • Rotation of θ about axis v: – q = (cos(θ/2), v sin(θ/2)) • "Unit quaternion": q.q = 1 (if v is a unit vector) • Maintain unit quaternion by normalizing v • Arbitrary vector r can be written in quaternion form as (0, r) Quaternion Rotation • To rotate a vector r by θ about axis v: – take q = (cos(θ/2), v sin(θ/2) – Let p = (0,r) – obtain p' from the quaternion resulting from qpq-1 – p' = (0, r') – r' is the rotated vector r Rotation Differentiation • Note: – q(t) = (s(t), v(t)) – q(t) = [ cos(θ(t)/2), u sin(θ(t)/2) ] – For a body rotating with constant angular velocity ω, it can be shown • q’(t) = [0, ½ ω] q(t) • Summarize this ½ ω q(t) Rigid Body Equations of Motion Using quaternions gives d/dt x(t) v(t) q(t) ½ ωq(t) P(t) L(t) = F(t) T(t) P and L • Note that – v = P/m (from P=mv) – ω = I-1L (from L = Iω) • Often useful to use momentum variables as main variables, and only compute v and ω (auxiliary variables) as needed for the integration Impulse • Sudden change in momentum – also, angular momentum (impulsive torque) • Collision resolution using impulse – new angular momentum according to conditions of collision – algorithmic means available for resolving