平面の方程式計算ツール
(1, 0, 0)、(0, 1, 0)、(0, 0, 1)を通る平面では、a、b、cがいずれも0.57735026919、dが−0.57735026919になります。3点、または1点と法線ベクトルを入力すれば、外積を手で計算する必要はありません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
法線ベクトルは単位長に正規化された係数a、b、c、dを返すため、異なる入力どうしの結果をそのまま比較できます。CADモデルの座標、物理の問題、宿題の練習問題などを入力すれば、1回の呼び出しで正確で整った方程式が得られます。手計算の外積も、符号のミスも、正規化の抜けもありません。
平面を定義する2つの方法
三次元空間の平面は、向きと通過する1点を定めれば一意に決まります。実務では、その情報は2つの形のどちらかで与えられます。1つ目は平面上の3点です——メッシュの三角形面の頂点、測量した3地点、図面から読み取った3点など。
3点が一直線上にない限り、それらすべてを含む平面はただ1つ存在します。両方の形式を同時に送ったり、不完全な形式を送ったりした場合は明確な検証エラーで拒否されるため、推測から計算された答えが返ることはありません。
方程式の導出方法
3点からの導出は古典的な解析幾何です。最初の点を2番目・3番目の点から引いて2つの方向ベクトルを作り、その外積が両方に垂直なベクトル——すなわち平面の法線——になります。点と法線からの場合はより簡単です。
法線がa、b、cを直接与え、dは点を方程式に代入して求まります。いずれの場合も、最後に法線を単位長にスケーリングし、すべての係数を小数点以下12桁に丸めます。この正規化には意味があります。
同じ平面は係数をスケーリングして無数に表せますが、正準形があれば2つの方程式の比較、重複の検出、点と平面の距離計算を追加の手順なしで行えます。
実務での活用場面
幾何処理パイプラインでは、係数形式の平面方程式が常に必要になります。衝突検出では点を面に対して分類し、レンダリングシェーダーではクリッピング平面への符号付き距離を使い、構造モデルではボルトパターンがガスケットを装着できるほど平坦かを確認します。
外積と代入を手作業で行うのはミスが多く退屈ですし、プロジェクトごとにインラインで書けば同じ10行があちこちに重複します。この機能は導出処理を1つの決定的な関数に集約します。状態も乱数もネットワークアクセスも関与しないため、同じ入力には常にバイト単位で同一の出力が返り、安心してキャッシュできます。
活用例
メッシュ・CADの面処理
三角形面の3頂点を、衝突判定やシェーディングで使う平面係数に変換します。
物理・工学の宿題
点と法線から手計算で導いた平面方程式を、正規化された正準形の答えと照合します。
パイプラインでの平坦度検証
測定した3点から平面を求め、残りの点の距離を計算して平坦度を定量化します。
よくある質問
どの入力形式が使えますか?
3点p1、p2、p3の形式、または点と法線ベクトルの組み合わせの形式です。どちらか一方だけを送信する必要があります。
係数が正規化されるのはなぜですか?
a、b、c、dを同じ倍率でスケーリングしても同じ平面を表します。法線を単位長に正規化することで答えが1つに定まり、呼び出し間で結果を比較できます。
結果を点と平面の距離計算に使えますか?
はい。 法線が単位長なので、任意の点(x, y, z)と平面の符号付き距離は単純にa*x + b*y + c*z + dで求まります。
結果は決定的ですか?
はい。 計算は固定の丸め規則を持つ純粋な算術なので、同じ入力には常に同じ出力が返ります。
3点が一直線上にあるとどうなりますか?
一直線上の3点を通る平面は無数にあるため、1つに決まりません。その場合は分かりやすいメッセージで知らせ、意味のない方程式は返しません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
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)リクエスト例
{
"p1": {
"x": 1,
"y": 0,
"z": 0
},
"p2": {
"x": 0,
"y": 1,
"z": 0
}
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.equation_of_a_plane",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
平面の方程式計算ツールは、実務で平面が与えられる代表的な2つの形——平面上の3つの非共線点、または1つの点と法線ベクトル——から、直交座標形式ax + by + cz + d = 0を導出します。
平面を定義する2つの方法
2つ目は平面上の点と、面に垂直な方向を示す法線ベクトルの組み合わせで、物理学やレンダリングエンジン、多くの幾何ライブラリの出力ではこの形が一般的です。平面の方程式エンドポイントはどちらの形式も受け付けます。p1、p2、p3を送るか、pointとnormalを送るかのいずれかで、返る結果は同じ正準形——ax + by + cz + d = 0の係数です。
方程式の導出方法
3点が一直線上にあるか一致している場合、外積はゼロベクトルとなり一意な平面は存在しないため、エンドポイントは退化した方程式を返す代わりに、その旨を正確に伝えるinvalid_inputエラーを返します。
実務での活用場面
このページではブラウザ上で無料で同じコードが動き——座標を貼って方程式を読むだけ——、自動化ワークフローに組み込みたい場合はAPI経由で1呼び出し$0.002で同一の結果が得られます。
技術的な質問
料金はいくらですか?
API経由では1リクエスト$0.002です。このページではブラウザ上で無料で実行できます。
3点が一直線上にある場合はどうなりますか?
共線点では一意な平面が定まらないことを説明するinvalid_inputエラーで失敗します。検証エラーは課金されません。