入射角計算機
屈折率1の媒質から屈折率1.5のガラスへ30°で入射した光は、法線から19.4712206345°の向きに進みます。入射角と2つの屈折率を入力すると屈折角が分かり、全反射になる場合はその旨を知らせます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 入射角
- 30
- N1
- 1
- N2
- 1.5
- 入射角 (°)
- 30 degrees
- 屈折角 (°)
- 19.4712206345
- 屈折角 (rad)
- 0.3398369095
光が2つの透明な媒質の境界に既知の角度で入射するとき、反対側ではどの角度で進むのでしょうか。
屈折角の計算方法
計算はスネルの法則 n1·sin(θ1) = n2·sin(θ2) に従い、θ2 = arcsin((n1/n2)·sin(θ1)) と変形して求めます。入射角 θ1 は表面そのものではなく、表面に垂直な仮想的な線である法線から測ります。したがって0度は光線が真向かいに入射することを、90度は境界に沿ってかすめることを意味します。
両方の屈折率は正の数でなければならず、真空はちょうど1、空気は約1.0003、水は約1.333、一般的なガラスは1.5から1.6の間です。光が密度の高い媒質(n2がn1より大きい)へ進むとき、光線は法線に向かって曲がり、返される角度は入射角より小さくなります。密度の低い媒質へ進むときは法線から離れる方向に曲がり、返される角度は大きくなります。
入射角がちょうど0度の場合、法線に沿って入射する光線には曲げられる横方向の成分がないため、2つの媒質が何であれ屈折角は常に0です。
全反射とエラーケース
光が密度の高い媒質から密度の低い媒質(n1がn2より大きい)へ進む場合、臨界角 θc = arcsin(n2/n1) が存在し、それを超えると必要な sin(θ2) の値が1を超えてしまいます。実数の角度の正弦が1を超えることはあり得ないため、これは不可能です。物理的には、光線は境界をまったく通過せず内部へ反射します。
これが光ファイバーやダイヤモンドの輝きの原理です。境界では小さな数値許容誤差が適用されるため、ちょうど臨界角にある入射角でも、浮動小数点の誤差で結果が変わることなく、90度の屈折角に解決されます。
活用例
光学の宿題を確認する
学生が紙と鉛筆で解いたスネルの法則の練習問題を確認します。入射角と両方の媒質の屈折率を入力し、計算された屈折角と比較します。
ガラスへ入る光を推定する
ソーラーパネルや温室の設計者は、特定の太陽角度での光線が水やガラスの層へどのように屈折するかを計算し、全反射を検出します。
よくある質問
どの角度規約が使われますか?
角度は表面の法線から測った度単位です。0は垂直入射、90は境界に沿う入射です。屈折角は度単位で返され、ラジアンの値も含まれます。
どの屈折率を使うべきですか?
真空はちょうど1、空気は約1.0003、水は約1.333、一般的なクラウンガラスは約1.52です。両方の屈折率は正の数でなければなりません。
臨界角を超えるとどうなりますか?
光が密な媒質から疎な媒質へ進み、入射角が臨界角を超えると、屈折する光は存在せず内側へ反射します。この計算機は、ありえない角度を返す代わりにそのことを知らせます。
光は法線に近づく向きと遠ざかる向きのどちらに曲がりますか?
より密な媒質に入るときは法線に近づき、屈折角は入射角より小さくなります。疎な媒質に入るときは遠ざかって角度が大きくなり、0°ではまっすぐ進みます。
ガラスに30°で入射した光は何度で進みますか?
屈折率1の媒質から屈折率1.5のガラスに入る場合、法線から19.4712206345°の向きに進みます。角度はどちらも面ではなく法線から測ります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/phys/angle-of-incidence \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"incidence_angle":30,"n1":1,"n2":1.5}'const res = await fetch("https://api.kit.forhosting.com/phys/angle-of-incidence", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"incidence_angle": 30,
"n1": 1,
"n2": 1.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/phys/angle-of-incidence",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"incidence_angle": 30,
"n1": 1,
"n2": 1.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/phys/angle-of-incidence", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"incidence_angle":30,"n1":1,"n2":1.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"incidence_angle":30,"n1":1,"n2":1.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/phys/angle-of-incidence", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"incidence_angle": 30,
"n1": 1,
"n2": 1.5
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "phys.angle_of_incidence",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
入射角計算APIは、光学の古典的な問いに1回の呼び出しで答えます。表面の法線から測った入射角を度単位で、各媒質の屈折率とともに指定すると、エンドポイントはスネルの法則を適用して屈折角を度単位で返します。すべてのフィールドで一般的なエイリアスを受け付け、両方の屈折率が正で角度が0から90度の範囲にあることを検証します。全反射が発生して幾何学的に不可能な場合は、暗黙のNaNを返すのではなく、明確なinvalid_inputエラーを報告します。
屈折角の計算方法
結果は有効数字12桁に丸められるため、同じリクエストはどのマシンでもバイト単位で同一の出力を生成します。これは、レスポンスを下流で保存、比較、ハッシュ化する場合に重要です。
全反射とエラーケース
物理的に意味のある失敗モードは1つだけあり、エンドポイントはそれをクラッシュではなく正式な結果として扱います。この状況では、APIは問題の入射角、2つの屈折率、計算された正弦値を示すメッセージを含むinvalid_inputエラーでリクエストを拒否します。これにより、呼び出し側のパイプラインはエラーコードを捕捉してロジックを切り替えることができます。たとえば光線を反射したものとして扱うなど、存在しない数値フィールドを解析しようとする代わりに対処できます。
入力、エイリアス、実用的な使い方
真偽値、配列、NaN、Infinityは拒否されます。典型的な統合例としては、光線を複数の境界を通して追跡するレンズやレイトレーシングシミュレーター、学生が紙と鉛筆で解いた光学の宿題を確認できる教育ツール、物理的に妥当な光路を必要とする写真やレンダリングのパイプライン、特定の太陽角度でガラスに実際にどれだけの光が入るかを推定するソーラーパネルや温室のレイアウトツールなどがあります。リクエストは3つの数値フィールドを取ります。incidence_angle(エイリアス: angle_incidence、theta1、incidence、i、angle_i、theta_i)、入射側媒質の n1(エイリアス: n_i、n_incident、incident_index、n1_index)、透過側媒質の n2(エイリアス: n_t、n_refracted、transmitted_index、n2_index)です。数値はJSONの数値または数値文字列として送信できるため、HTMLフォームやクエリパラメータに対応しやすくなっています。レスポンスは検証済みの入力をエコーし、refraction_angle_deg、同じ角度のラジアン値、適用された公式、単位を追加するため、クライアントが規約を推測する必要はありません。
連携の活用例
レンズシミュレーターで光線を追跡する
レイトレーシングツールはガラスと空気の各境界でエンドポイントを呼び出し、出力された角度を経路の次のセグメントへ連鎖させます。
技術的な質問
料金はいくらですか?
リクエストごとに$0.002です。このページのブラウザ上では無料で実行できます。
全反射が発生するとどうなりますか?
その屈折率と入射角では屈折角が存在しないことを説明するinvalid_inputエラーでリクエストが拒否されます。
値を文字列として送信できますか?
はい。数値文字列は受け付けられ、変換されます。数値でない値、NaN、Infinityはinvalid_inputで拒否されます。