スネルの法則で入射角を求める計算機
この計算機はスネルの法則を変形し、平面境界で指定した屈折角を生じさせる入射光の向きを求めます。入射側媒質の屈折率、透過側媒質の屈折率、法線から測った希望の屈折角を度数で入力してください。必要な入射角、中間の正弦値、相対屈折率を返します。実在する入射角では目標を実現できない場合は、未定義または誤解を招く数値を返さず、到達不能であることを明示します。
無料で実行
スネルの法則から入射角を求める方法
スネルの法則は通常、n1かけるsin(theta1)イコールn2かけるsin(theta2)と表します。n1は入射光が進む媒質の屈折率、theta1は入射角、n2は透過先の屈折率、theta2は屈折角です。この計算ではtheta2を既知として逆に解きます。sin(theta1)はn2をn1で割り、sin(theta2)を掛けた値になり、その逆正弦からtheta1を得ます。角度はすべて表面の法線を基準とする度数です。0度は垂直入射、90度は境界に沿うかすめ入射を示します。表面そのものを基準にすると余角となり、物理配置を誤ります。均質かつ等方的な2媒質が1つの平面境界で接するモデルを前提としています。曲面、傾斜屈折率、波長分散、多層干渉、偏光は扱いません。この範囲では決定的に計算され、ブラウザーとAPIは同じ純粋関数を使用します。
希望する屈折角が物理的に可能か確認する方法
逆算では定義域の確認が欠かせません。実角の正弦は1を超えないため、n2をn1で割ってsin(theta2)を掛けた量は1以下でなければなりません。これを超えると、0度から90度までのどの入射角でも、指定した屈折率の組み合わせで希望の屈折を作れません。特に透過側の屈折率が高く、要求する屈折角が大きすぎる場合に生じます。計算機はその入力を無効として扱い、参考として到達可能な最大屈折角を示します。境界値では必要な入射角が90度になります。境界付近のごく小さな浮動小数点誤差は安全に補正しますが、実際に不可能な値を黙って変更することはありません。2つの屈折率は有限の正数、目標角は端点を含む0度から90度で入力してください。代表値は空気が約1、水が1.333、一般的なガラスが約1.5です。
実験・設計・ソフトウェアで結果を利用する方法
angle_incidenceは境界面の法線に対して設定する向きです。実験ではレーザーまたは試料をその角度まで回転させ、測定した透過光をangle_refractionと比較してください。光学設計では、厚さ、曲率、複数面を含む本格的な光線追跡へ進む前の一次的な境界計算として利用できます。ソフトウェアでは対話的な光線の配置、提案された幾何形状の検証、解答例の生成にも使えます。応答は整形した屈折率と目標角を再掲し、検算用の2つの正弦値と、n2をn1で割ったrelative_indexを返します。これにより単位変換や媒質の順序の誤りを見つけやすくなります。formulaとunitは表示用で、後続計算には数値フィールドをご使用ください。成功したAPI項目の基本料金は$0.002で、ブラウザー版はローカルで動作します。ネットワークを使わない定数時間の処理なので、同じ入力から常に同じ結果を得られます。
活用例
屈折実験を準備する
空気、水、アクリル、ガラスの境界で目的の透過方向を観測するためのレーザー入射角を求めます。
光学配置を検証する
詳細な光線追跡モデルを作る前に、単一境界で目標方向を実現できるか確認します。
光学問題を作成する
教材や自動採点で再現可能な入射角の解答を作り、物理的に不可能な組み合わせを除外します。
よくある質問
入射角はどの式で求めますか?
n1·sin(theta1) = n2·sin(theta2)をtheta1 = arcsin((n2/n1)·sin(theta2))に変形します。
角度は表面から測りますか?
いいえ、表面の法線から測ります。0度は垂直入射、90度はかすめ入射です。
希望の屈折角を実現できないのはなぜですか?
実角には(n2/n1)·sin(theta2)が1以下という条件があります。1を超える値には、この境界で実数の逆正弦がありません。
どの屈折率を入力すればよいですか?
有限の正の絶対屈折率をご入力ください。目安は空気が1、水が1.333、一般的なガラスが1.5です。
計算にはいくらかかりますか?
ブラウザー版はローカルで無料動作します。成功したAPI項目には公開基本料金$0.002が適用されます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/optics/incidence-angle-from-snell \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n1":1,"n2":1.5,"angle_refraction":19.4712206345}'const res = await fetch("https://api.kit.forhosting.com/optics/incidence-angle-from-snell", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n1": 1,
"n2": 1.5,
"angle_refraction": 19.4712206345
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/optics/incidence-angle-from-snell",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n1": 1,
"n2": 1.5,
"angle_refraction": 19.4712206345
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/optics/incidence-angle-from-snell", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n1":1,"n2":1.5,"angle_refraction":19.4712206345}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n1":1,"n2":1.5,"angle_refraction":19.4712206345}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/optics/incidence-angle-from-snell", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n1": 1,
"n2": 1.5,
"angle_refraction": 19.4712206345
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "optics.incidence_angle_from_snell",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |