Horizon dip angle calculator from observer height
See how far below level the horizon sits from a given eye height: at 10 metres the dip is about a tenth of a degree and the horizon is roughly 11 km away, on a sphere with the mean Earth radius. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Observer height m
- 10
- Dip angle degrees
- 0.101515707
- Dip angle radians
- 0.0017717833
- Line of sight distance m
- 11,288.059001
- Surface arc distance m
- 11,288.047189
The horizon dip angle is the angle between a perfectly level horizontal sightline and the visible geometric horizon below it. Enter the observer's eye height above the surface to calculate that angle in degrees and radians, together with the straight-line distance to the tangent point and the corresponding surface arc. The calculation uses a spherical body with the mean Earth radius by default, while allowing a different positive radius for another Earth convention, planet, moon, or idealized sphere. It is deterministic and does not include atmospheric refraction, waves, terrain, or tides.
What horizon dip means
Standing above a smooth spherical surface lets you see a horizon that lies slightly below a truly horizontal line through your eye. The angular separation between that horizontal line and the downward line of sight to the tangent point is called the horizon dip angle. At zero height, the geometric horizon begins at the observer and the dip is zero.
As eye height increases, the visible tangent point moves farther away and the dip grows. For a person on a beach, use eye height above the local water surface. On a ship, lighthouse, cliff, aircraft, or orbital platform, use the eye or instrument height above the spherical reference surface required by the calculation.
The returned angle is below horizontal and is reported as a positive magnitude. It is not a compass bearing, elevation above the horizon, or angular diameter. The result describes an ideal unobstructed horizon, so nearby land, buildings, swells, and haze can determine what is actually visible before geometric curvature does.
How the spherical calculation works
The sphere center, observer, and horizon tangent point form a right triangle because a radius drawn to a tangent point is perpendicular to the line of sight. If R is radius and h is observer height, the observer is R plus h from the center. The dip can be written as arccos of R divided by R plus h.
The implementation evaluates the equivalent atan2 expression using the tangent distance, the square root of h times the quantity two R plus h. That form avoids losing useful floating-point precision when h is tiny compared with Earth radius. The default radius is 6,371,008.8 meters, the conventional IUGG mean Earth radius.
Every calculation remains spherical; entering an ellipsoidal local radius is an approximation, not a full ellipsoid solution.
Accuracy, refraction, and practical interpretation
The output is the geometric or vacuum horizon dip. Real observations through air can differ because atmospheric density usually changes with height and bends light. A common effective-Earth-radius shortcut increases the radius to represent standard refraction, but refraction varies with temperature gradients, pressure, humidity, altitude, and conditions immediately above the water.
This capability deliberately does not guess those conditions. Surveying, marine navigation, geodesy, and precision celestial observations may also need ellipsoidal geometry, geoid separation, tide level, wave height, instrument calibration, and a measured refraction model. The geometric result is nevertheless useful as a reproducible baseline for planning viewpoints, checking order of magnitude, teaching curvature, comparing observation heights, or feeding a larger optical model.
Degrees are convenient for human reading, while radians are suitable for subsequent formulas. Distances are returned in meters because both inputs use meters.
What you can do with it
Plan a coastal observation
Estimate how far below true horizontal the ideal sea horizon lies for an observer on a beach, deck, cliff, or lighthouse.
Check a surveying baseline
Compute a reproducible geometric dip before adding project-specific refraction, ellipsoid, tide, and instrument corrections.
Model another spherical body
Supply a moon, planet, or custom sphere radius to compare horizon dip and tangent distance at a chosen height.
FAQ
What is the dip of the horizon?
It is the positive angle below a level horizontal sightline to the geometric tangent point that forms the visible horizon on a smooth sphere.
Does the calculation include atmospheric refraction?
No. It calculates the geometric horizon without refraction. You may enter a justified effective radius if your own model represents refraction that way.
Which height should I enter?
Enter the eye or instrument height above the modeled surface. For a sea horizon, that is normally height above the local water surface, not simply building elevation above a map datum.
Why can I change the radius?
A custom radius supports another spherical Earth convention, an effective-radius approximation, or a different planet, moon, or idealized sphere.
What are the two distances in the result?
One is the straight line of sight from your eye to the horizon point; the other is the arc along the surface, from the point below you to the horizon. At a height of 10 metres both are close to 11 km and almost identical.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/geo/horizon-dip-angle \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"observer_height_m":10}'const res = await fetch("https://api.kit.forhosting.com/geo/horizon-dip-angle", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"observer_height_m": 10
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/horizon-dip-angle",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"observer_height_m": 10
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/horizon-dip-angle", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"observer_height_m":10}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"observer_height_m":10}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/horizon-dip-angle", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"observer_height_m": 10
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.horizon_dip_angle",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
What horizon dip means
This calculator expects observer_height_m to mean vertical height above the modeled surface, not altitude above sea level combined with an unknown terrain elevation.
How the spherical calculation works
The same triangle gives the line_of_sight_distance_m field, which is the straight segment from observer to tangent point. Multiplying the dip in radians by R gives surface_arc_distance_m, the distance along the modeled sphere from the point directly below the observer to the horizon. You may provide radius_m when a project uses a different spherical Earth convention or models another body.
Accuracy, refraction, and practical interpretation
If your workflow has a justified effective radius, supply it explicitly as radius_m and record that assumption beside the result. Browser use is available for interactive checks, and a successful API request costs $0.002.
Technical questions
How much does an API calculation cost?
A successful API request costs $0.002. Invalid inputs are rejected, and the calculation can also run interactively in the browser.