Triangle incenter calculator
Find the center of the largest circle that fits inside a triangle: for the vertices (0, 0), (4, 0) and (0, 3), the incenter is (1, 1) and the inscribed circle has radius 1. Side lengths, area and semiperimeter are shown too. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Ax
- 0
- Ay
- 0
- Bx
- 4
- By
- 0
- Cx
- 0
- Cy
- 3
- Inradius
- 1
- Area
- 6
- Semiperimeter
- 6
The incenter of a triangle is the unique point where the three angle bisectors meet, and it is also the center of the largest circle that fits inside the triangle—the incircle. Given only the Cartesian coordinates of the three vertices, this capacity computes that point by weighting each vertex by the length of the opposite side, then derives the inradius as the ratio of the triangle’s area to its semiperimeter.
What the incenter and inradius represent
In Euclidean plane geometry, every non-degenerate triangle has a unique incircle that is tangent to all three sides. The center of that circle is the incenter: it is equidistant from the three sides, and that common distance is the inradius. Algebraically, if the side lengths opposite vertices A, B, and C are a, b, and c, the incenter’s coordinates are the weighted average (aA + bB + cC) / (a + b + c).
That side-length weighting is not an approximation; it is the exact barycentric formula that places the point at the intersection of the angle bisectors. Once you also know the area of the triangle—here obtained from the magnitude of the cross product of two edge vectors—the inradius follows immediately as r = Area / s, where s is the semiperimeter (a + b + c) / 2. Together, the incenter and inradius fully describe the inscribed circle without needing angle measures or iterative numerical search.
This tool accepts the six numbers that define the vertices in the plane and returns those two geometric quantities plus the intermediate side lengths, area, and semiperimeter so you can audit every step of the derivation in homework, CAD scripts, or game-level tooling.
Degenerate inputs, collinearity, and practical limits
A triangle requires positive area. If the three points lie on a single line—or if any two coincide—the side-weighted formula would still produce a numeric point, but that point is not an incenter of a triangle and the inradius formula divides by a zero or near-zero area path. This capacity therefore measures the absolute cross product of AB and AC and rejects inputs whose area falls below a tiny epsilon, with the message that the three points are collinear and the incenter is undefined.
Coincident vertices are called out separately so you can distinguish a duplicate point from a flat triangle. There is no network lookup, no random sampling, and no dependence on wall-clock time: identical vertices always yield identical output. When you need related centers (centroid, circumcenter, orthocenter), treat those as separate search intents; this landing is dedicated to the incenter–inradius pair computed from vertices alone.
What you can do with it
Homework and exam answer keys
Students and instructors verify textbook problems such as a 3-4-5 right triangle with vertices at (0,0), (4,0), and (0,3), expecting incenter (1,1) and inradius 1.
Inscribed circles in design and CAD scripts
Pipeline tools place the largest interior circle inside a triangular panel or cutout by reading the incenter and inradius from three corner points.
Game and simulation clearance checks
Level authors compute how large a circular actor can sit inside a triangular region without leaving the bounds defined by three vertices.
FAQ
How do I calculate a triangle’s incenter from three vertices?
The response includes incenter coordinates, inradius, area, semiperimeter, and side lengths.
What formula do you use for the incenter?
Side-length weighting: I = (aA + bB + cC) / (a+b+c), where a, b, c are the lengths of the sides opposite A, B, and C. The inradius is area divided by the semiperimeter.
What happens if the three points are collinear?
A degenerate triangle has no well-defined incenter or positive inradius, so the tool refuses to invent values.
Does the result depend on vertex order?
The incenter and inradius are independent of labeling: swapping which point is A, B, or C yields the same geometric center and radius (side labels a, b, c follow the chosen naming).
What is the inradius and how is it found?
It is the radius of the largest circle that fits inside the triangle while touching all three sides. It equals the area divided by the semiperimeter: for (0, 0), (4, 0) and (0, 3), an area of 6 over a semiperimeter of 6 gives 1.
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/geom/triangle-incenter \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"ax":0,"ay":0,"bx":4,"by":0,"cx":0,"cy":3}'const res = await fetch("https://api.kit.forhosting.com/geom/triangle-incenter", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"ax": 0,
"ay": 0,
"bx": 4,
"by": 0,
"cx": 0,
"cy": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geom/triangle-incenter",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"ax": 0,
"ay": 0,
"bx": 4,
"by": 0,
"cx": 0,
"cy": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geom/triangle-incenter", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"ax":0,"ay":0,"bx":4,"by":0,"cx":0,"cy":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"ax":0,"ay":0,"bx":4,"by":0,"cx":0,"cy":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geom/triangle-incenter", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"ax": 0,
"ay": 0,
"bx": 4,
"by": 0,
"cx": 0,
"cy": 3
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geom.triangle_incenter",
"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
The algorithm is closed-form, deterministic, and runs entirely in the Worker or your browser with no network calls. Collinear or coincident vertices are rejected with a clear invalid_input error so you never receive a fabricated center for a degenerate figure.
How to call the calculator and read the result
Use the response to place an inscribed circle in a canvas, verify a geometry homework answer, or seed collision and clearance checks that depend on the largest interior circle rather than on the circumcircle or centroid. Send the six coordinates of vertices A, B, and C as ax, ay, bx, by, cx, and cy (aliases x1…y3 are also accepted). On success the JSON includes incenter.x and incenter.y, the scalar inradius, the area, the semiperimeter, side_lengths with a opposite A (length BC), b opposite B (length AC), and c opposite C (length AB), plus an echo of the rounded vertices. Pricing for a successful API call is a flat $0.002 under the item unit; validation failures are not charged.
Degenerate inputs, collinearity, and practical limits
Coordinates must be finite numbers (or digit strings that parse to finite numbers); missing fields fail with invalid_input naming the first missing key.
Technical questions
Is the browser tool free?
Yes. The in-browser runner uses the same library as the API and costs nothing. The API charges $0.002 per successful request from your prepaid KIT balance.