calculate_magnus_force
Compute the Magnus force vector and magnitude for a spinning ball moving through a fluid, enabling analysis of curved motion in sports or aerodynamics.
Instructions
Calculate Magnus force on a spinning ball.
The Magnus force is perpendicular to both velocity and spin axis.
Causes curve balls in sports.
Args:
velocity: Ball velocity [x, y, z] in m/s (or JSON string)
angular_velocity: Angular velocity [x, y, z] in rad/s (or JSON string)
radius: Ball radius in meters
fluid_density: Fluid density in kg/m³ (air=1.225)
Returns:
Dict containing:
- magnus_force: Magnus force vector [x, y, z] in Newtons
- magnus_force_magnitude: Force magnitude in Newtons
- spin_rate: Spin rate (angular velocity magnitude) in rad/s
Example - Soccer ball curve:
result = await calculate_magnus_force(
velocity=[20, 0, 0], # 20 m/s forward
angular_velocity=[0, 0, 50], # 50 rad/s topspin
radius=0.11, # Soccer ball
fluid_density=1.225
)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| velocity | Yes | ||
| angular_velocity | Yes | ||
| radius | Yes | ||
| fluid_density | No |
Implementation Reference
- MCP tool endpoint for calculate_magnus_force - decorated with @tool, handles input parsing (lists/JSON strings), constructs MagnusForceRequest, calls the core handler from fluid_advanced, and returns serialized response.
@tool # type: ignore[arg-type] async def calculate_magnus_force( velocity: Union[list[float], str], angular_velocity: Union[list[float], str], radius: float, fluid_density: float = 1.225, ) -> dict: """Calculate Magnus force on a spinning ball. The Magnus force is perpendicular to both velocity and spin axis. Causes curve balls in sports. Args: velocity: Ball velocity [x, y, z] in m/s (or JSON string) angular_velocity: Angular velocity [x, y, z] in rad/s (or JSON string) radius: Ball radius in meters fluid_density: Fluid density in kg/m³ (air=1.225) Returns: Dict containing: - magnus_force: Magnus force vector [x, y, z] in Newtons - magnus_force_magnitude: Force magnitude in Newtons - spin_rate: Spin rate (angular velocity magnitude) in rad/s Example - Soccer ball curve: result = await calculate_magnus_force( velocity=[20, 0, 0], # 20 m/s forward angular_velocity=[0, 0, 50], # 50 rad/s topspin radius=0.11, # Soccer ball fluid_density=1.225 ) """ from ..fluid_advanced import MagnusForceRequest, calculate_magnus_force as calc_magnus parsed_velocity = json.loads(velocity) if isinstance(velocity, str) else velocity parsed_angular_velocity = ( json.loads(angular_velocity) if isinstance(angular_velocity, str) else angular_velocity ) request = MagnusForceRequest( velocity=parsed_velocity, angular_velocity=parsed_angular_velocity, radius=radius, fluid_density=fluid_density, ) response = calc_magnus(request) return response.model_dump()