Equation of a plane
The plane through (1, 0, 0), (0, 1, 0) and (0, 0, 1) has a, b and c all equal to 0.57735026919 and d equal to −0.57735026919. Enter three points, or one point and a normal vector, and get the equation with no hand-made cross product. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Runs in your browser. Free, unlimited — your data never leaves this page.
Feed it coordinates from a CAD model, a physics problem or a homework exercise and get a clean, exact equation in one call — no manual cross product, no sign mistakes, no forgotten normalization step.
Two ways to define a plane
A plane in three-dimensional space is fully determined once you fix its orientation and one point it passes through. In practice that information arrives in one of two shapes. The first is three points that lie on the plane — the corners of a triangular face of a mesh, three surveyed positions, three points read off a drawing.
As long as the three points are not collinear, exactly one plane contains all of them. The second shape is a point on the plane plus a normal vector, the direction perpendicular to the surface. This is how planes appear in physics, in rendering engines and in the output of many geometry libraries.
Sending both forms, or an incomplete form, is rejected with a clear validation error so you never get an answer computed from a guess.
How the equation is derived
From three points the method is classical analytic geometry. Two direction vectors are formed by subtracting the first point from the second and third, and their cross product gives a vector perpendicular to both — that is, a normal to the plane. From a point and a normal the work is shorter: the normal supplies a, b and c directly, and d follows by substituting the point into the equation.
In both cases the normal is then scaled to unit length and every coefficient is rounded to twelve decimal places. That normalization matters: the same plane can be written with infinitely many scaled coefficient sets, and a canonical form lets you compare two equations, detect duplicates and compute point-to-plane distances without extra steps.
Where it fits in real work
Geometry pipelines constantly need plane equations in coefficient form. A collision-detection stage classifies points against faces; a rendering shader needs the signed distance to a clipping plane; a structural model checks whether a bolt pattern is flat enough to seat a gasket. Doing the cross product and substitution by hand is error-prone and boring; doing it inline in every project duplicates the same ten lines everywhere.
This capability centralizes the derivation behind one deterministic function. There is no state, no randomness and no network access involved, so a given input always produces byte-identical output you can safely cache.
What you can do with it
Mesh and CAD face processing
Turn the three vertices of a triangular face into the plane coefficients a collision or shading stage expects.
Physics and engineering homework
Check a hand-derived plane equation from a point and normal against a canonical, normalized answer.
Flatness validation in pipelines
Feed three measured points, get the plane, and compute distances of further points to quantify flatness.
FAQ
Which input forms are accepted?
Either three points p1, p2 and p3, or a point together with a normal vector. Exactly one of the two forms must be sent.
Why are the coefficients normalized?
Scaling a, b, c and d by the same factor describes the same plane. Normalizing the normal to unit length gives one canonical answer, which makes results comparable across calls.
Can I use the result for point-to-plane distance?
Yes. Because the normal has unit length, the signed distance of any point (x, y, z) to the plane is simply a*x + b*y + c*z + d.
Are the results deterministic?
Yes. The computation is pure arithmetic with fixed rounding, so the same input always returns the same output.
What happens if the three points lie on one line?
Then no single plane passes through them, because infinitely many do. The calculator says so with a clear message instead of returning a broken equation, so check that your points are not collinear or repeated.
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/math/equation-of-a-plane \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"p1":{"x":1,"y":0,"z":0},"p2":{"x":0,"y":1,"z":0}}'const res = await fetch("https://api.kit.forhosting.com/math/equation-of-a-plane", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"p1": {
"x": 1,
"y": 0,
"z": 0
},
"p2": {
"x": 0,
"y": 1,
"z": 0
}
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/equation-of-a-plane",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"p1": {
"x": 1,
"y": 0,
"z": 0
},
"p2": {
"x": 0,
"y": 1,
"z": 0
}
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/equation-of-a-plane", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"p1":{"x":1,"y":0,"z":0},"p2":{"x":0,"y":1,"z":0}}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"p1":{"x":1,"y":0,"z":0},"p2":{"x":0,"y":1,"z":0}}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/equation-of-a-plane", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"p1": {
"x": 1,
"y": 0,
"z": 0
},
"p2": {
"x": 0,
"y": 1,
"z": 0
}
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.equation_of_a_plane",
"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 equation of a plane calculator derives the Cartesian form ax + by + cz + d = 0 from the two ways a plane is usually given in practice: three non-collinear points lying on it, or a single point together with a normal vector. It returns the coefficients a, b, c and d with the normal vector normalized to unit length, so results from different inputs are directly comparable.
Two ways to define a plane
The equation of a plane endpoint accepts either form. Send p1, p2 and p3, or send point and normal, and it returns the same canonical output: the coefficients of ax + by + cz + d = 0.
How the equation is derived
If the points are collinear or coincident, the cross product is the zero vector and no unique plane exists, so the endpoint answers with an invalid_input error saying exactly that instead of returning a degenerate equation.
Where it fits in real work
The exact same code runs free in your browser on this page — paste coordinates, read the equation — and the identical result is available over the API at $0.002 per call when you need it inside an automated workflow.
Technical questions
What does it cost?
$0.002 per request via the API. It is also free to run in your browser on this page.
What happens if my three points are collinear?
The request fails with an invalid_input error explaining that collinear points do not define a unique plane. Failed validations are not billed.