Vector2 clamped(double maxLength) { final mag = magnitude; if (mag > maxLength) { final scale = maxLength / mag; return Vector2(x * scale, y * scale); } return Vector2.copy(this); }