calculate_normal_force
Compute normal force on an incline using mass, angle, and optional additional force. Returns normal force and weight components parallel and perpendicular to the surface.
Instructions
Calculate normal force on an inclined plane.
On an incline at angle θ:
- N = mg cos(θ) + F_additional
- Weight component perpendicular: mg cos(θ)
- Weight component parallel: mg sin(θ)
Args:
mass: Object mass in kg
gravity: Gravitational acceleration in m/s² (default 9.81)
angle_degrees: Incline angle in degrees (0 = horizontal)
additional_force: Additional perpendicular force in Newtons (optional)
Returns:
Dict containing:
- normal_force: Normal force in Newtons
- weight_component_perpendicular: Weight component ⊥ to surface
- weight_component_parallel: Weight component ∥ to surface
Example - Box on 30° ramp:
result = await calculate_normal_force(
mass=10.0,
angle_degrees=30.0
)
# normal_force ≈ 84.9 N
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mass | Yes | ||
| gravity | No | ||
| angle_degrees | No | ||
| additional_force | No |
Implementation Reference
- MCP tool handler function for calculate_normal_force. This is the @tool-decorated async function that is the public MCP interface. It accepts mass, gravity, angle_degrees, and optional additional_force, creates a NormalForceRequest, delegates to the core implementation in ..statics, and returns a dict via model_dump().
@tool # type: ignore[arg-type] async def calculate_normal_force( mass: float, gravity: float = 9.81, angle_degrees: float = 0.0, additional_force: float | None = None, ) -> dict: """Calculate normal force on an inclined plane. On an incline at angle θ: - N = mg cos(θ) + F_additional - Weight component perpendicular: mg cos(θ) - Weight component parallel: mg sin(θ) Args: mass: Object mass in kg gravity: Gravitational acceleration in m/s² (default 9.81) angle_degrees: Incline angle in degrees (0 = horizontal) additional_force: Additional perpendicular force in Newtons (optional) Returns: Dict containing: - normal_force: Normal force in Newtons - weight_component_perpendicular: Weight component ⊥ to surface - weight_component_parallel: Weight component ∥ to surface Example - Box on 30° ramp: result = await calculate_normal_force( mass=10.0, angle_degrees=30.0 ) # normal_force ≈ 84.9 N """ from ..statics import NormalForceRequest from ..statics import calculate_normal_force as calc_normal request = NormalForceRequest( mass=mass, gravity=gravity, angle_degrees=angle_degrees, additional_force=additional_force, ) response = calc_normal(request) return response.model_dump() - src/chuk_mcp_physics/tools/statics.py:5-5 (registration)Tool registration via the @tool decorator (from chuk_mcp_server) applied to the calculate_normal_force async function at line 165.
from chuk_mcp_server import tool