Skip to content

Physics · Mechanics · core

Balancing Act: Torque and Levers

force times lever arm decides which way it turns

A lever balances when m₁r₁ = m₂r₂. Torque is force times lever arm, and net torque over moment of inertia gives angular acceleration.

View .md
Interactive visual

The cyan (left) and orange (right) loads sit on a grey plank with 1 m ticks; yellow arrows are their weights. The defaults balance (3 kg × 2 m = 2 kg × 3 m), so the plank stays level. Change any mass or distance and it tips toward the larger torque.

What it is

Torque is the turning effect of a force: its size times its perpendicular distance from the pivot, τ = r·F·sin φ. A 2 kg box 3 m from a fulcrum turns a plank exactly as hard as a 3 kg box 2 m away on the other side, so the plank stays level. That is the law of the lever, m₁r₁ = m₂r₂.

When the torques do not cancel, the plank gains angular velocity in the direction of the stronger side: Στ = I·α. The moment of inertia I = Σ m r² grows with the square of distance, so the same loads placed far out make the plank turn more sluggishly even when the net torque is the same.

Games meet torque in see-saw puzzles, physics-based cranes, ragdolls and vehicles. In a rigid-body engine you rarely compute it yourself: call applyForceAtPoint and the engine adds r × F to the body's torque. Understanding it tells you why a heavy object placed off-centre tips a platform, why long arms feel slow to swing, and how far to put a counterweight.

Key formulas

Torque (vector form)
Lever balance
Rotational Newton's law
Moment of inertia (plank + point loads)

Rules of thumb

  • Static equilibrium needs both ΣF = 0 and Στ = 0 about any point; pick the pivot as that point so the support force drops out.
  • Only the component of the force perpendicular to the arm counts: a weight on a plank tilted by θ has lever arm r·cos θ.
  • Doubling a load's distance doubles its torque but quadruples its contribution to inertia.
  • To balance a load W at distance r with a counterweight C, place C at W·r / C on the other side.

Implementation

Net torque and angular step for a see-saw (fixed timestep):
type Load = { mass: number; x: number } // x: signed distance from pivot (m)

export function stepSeesaw(
  s: { angle: number; omega: number },
  loads: Load[],
  plankMass: number,
  plankLength: number,
  dt: number,
  g = 9.81,
  damping = 1.5
) {
  let torque = 0
  let inertia = (plankMass * plankLength ** 2) / 12
  for (const l of loads) {
    torque -= l.mass * g * l.x * Math.cos(s.angle) // CCW positive; right side pushes CW
    inertia += l.mass * l.x * l.x
  }
  s.omega += (torque / inertia - damping * s.omega) * dt
  s.angle += s.omega * dt
  s.angle = Math.max(-0.45, Math.min(0.45, s.angle)) // ground stops
}

Common mistakes

  • Comparing masses instead of torques: a light load far out can beat a heavy one close in.
  • Using the distance along the tilted plank without the cos θ factor once it rotates.
  • Forgetting the plank's own inertia, which makes an empty see-saw spin unrealistically fast.
  • Applying a force at the centre of mass in the engine and wondering why the object never rotates; use the force-at-point call.

Prompt

Write a TypeScript see-saw puzzle module for a Three.js game. Inputs: plank length and mass, a list of loads {mass, x} where x is signed distance from the fulcrum, and a fixed timestep. Compute net torque Σ(−m·g·x·cos θ), moment of inertia ML²/12 + Σ m x², integrate angle with semi-implicit Euler plus light damping, and clamp at ±25° ground stops. Expose isBalanced(tolerance) and counterweightPosition(mass). Unit tests: 3 kg at −2 m and 2 kg at +3 m is balanced; moving the 2 kg load to +3.5 m makes the plank rotate clockwise.

Further reading

Updated 2026-11-01