薄いレンズの像距離計算ツール
この計算ツールは、焦点距離とレンズから物体までの符号付き距離が分かっている場合に、ガウスの薄レンズ方程式を解きます。像距離を符号付きで返し、実像か虚像かも示すため、数値の向きを物理的に解釈できます。ミリメートル、センチメートル、メートル、インチなど、同じ長さの単位で統一すればどれでも使用できます。計算は決定的でネットワークを使用せず、単発の確認にもAPIによる反復処理にも適しています。
無料で実行
統一した符号規約で距離を入力してください
薄いレンズの計算では、符号規約を明確にすることが重要です。このツールは、1/f = 1/do + 1/di で表されるガウスの符号規約を採用しています。収束レンズでは正の焦点距離、発散レンズでは負の焦点距離を入力してください。通常、レンズの前に置かれた実物体の物体距離は正です。2つの入力には同じ物理単位を使用しますが、単位名を指定する必要はありません。焦点距離をミリメートルで入力すれば像距離もミリメートルになり、両方をセンチメートルで入力すれば答えもセンチメートルになります。換算せずに異なる単位を混在させないでください。結果の符号も保持されます。正の像距離は像側にできる実像、負の像距離は物体側にある虚像を表します。この規約により、収束レンズ、発散レンズ、実物体、虚物体の各構成を1つの式で扱いながら、方向の物理的意味を保てます。
方程式と特異な条件をご確認ください
薄レンズ方程式 1/f = 1/do + 1/di から未知数を分離すると、1/di = 1/f - 1/do になります。分数をまとめて逆数を取ると、di = f·do/(do-f) が得られます。このツールは有限数を検証して式を評価し、指定された精度で返却値だけを丸めます。物体距離が焦点距離と等しい場合には注意が必要です。このとき分母 do-f はゼロになり、レンズを出た光線は幾何学的に平行となるため、像は有限の位置ではなく無限遠にあるとされます。無限大はJSONで有効な距離として扱えないため、誤解を招く巨大な数値や空値ではなく入力エラーを返します。逆数形式が未定義になるので、ゼロの入力も受け付けません。焦点面に極めて近い入力では、わずかな測定誤差から非常に大きな有限値が生じます。正確な配置距離として採用する前に、測定精度をご確認ください。
光学作業で結果を解釈してください
主な答えは image_distance フィールドです。正の値は実像かつ倒立と判定されます。これは、実物体が収束レンズの焦点より外側にある一般的な場合です。薄レンズ近似が成り立つ範囲では、その符号付き距離付近にスクリーンやセンサーを置くと、合焦した像を受けられます。負の値は虚像かつ正立です。その位置でスクリーンに直接投影することはできず、観察者は出射光線を後方へ延長して像を認識します。収束レンズの焦点内に物体がある場合や、発散レンズの多くの用途で生じます。実際のレンズには厚さ、主平面、収差、波長依存性、取付公差があり、理想式には含まれません。精密な作業では適切な主平面から測り、結果を初期設計値としてご利用ください。反復計算のAPI料金は1回$0.002で、式、正規化入力、分類、精度も返されます。
活用例
カメラセンサーの位置決め
理想的な薄いレンズで既知距離の物体に合焦するため、センサーとレンズの間隔を見積もれます。
光学演習の確認
像距離を求め、実像・倒立になるか、虚像・正立になるかをご確認いただけます。
光学設計の予備評価
詳細な光線追跡へ進む前に、焦点距離と物体距離の組み合わせを比較できます。
よくある質問
どの方程式を使用しますか?
1/f = 1/do + 1/di を使用し、di = f·do/(do-f) の形に解きます。
どの単位を使えばよいですか?
任意の長さ単位を使用できますが、2つの入力で同じ単位にそろえてください。結果もその単位です。
像距離が負になるのはなぜですか?
示したガウスの符号規約では、負の像距離は虚像かつ正立であることを表します。
物体距離と焦点距離が等しい場合はどうなりますか?
理想像は無限遠にできるため、有限距離の代わりに入力エラーを返します。
APIリクエストの料金はいくらですか?
APIによる計算は1回$0.002です。決定的な処理で、外部サービスは使用しません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/optics/image-distance-thin-lens \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"focal_length":10,"object_distance":30}'const res = await fetch("https://api.kit.forhosting.com/optics/image-distance-thin-lens", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"focal_length": 10,
"object_distance": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/optics/image-distance-thin-lens",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"focal_length": 10,
"object_distance": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/optics/image-distance-thin-lens", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"focal_length":10,"object_distance":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"focal_length":10,"object_distance":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/optics/image-distance-thin-lens", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"focal_length": 10,
"object_distance": 30
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "optics.image_distance_thin_lens",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |