snell_angle — 3D optics op

• Data kinds: measurement → measurement

• Call: import fullseye as fs; fs.ledger.snell_angle(theta_i_deg, eta1=1.0, eta2=1.5) (implementation को सीधे call करना हो तो import match3d; match3d.snell_angle(theta_i_deg, eta1=1.0, eta2=1.5), registry से लेना हो तो ops3d.get("snell_angle"))

उपयोग

incident angle (डिग्री) → refraction angle (डिग्री)। n1 sinθi = n2 sinθt। critical angle से ऊपर NaN (total internal reflection)।

θt = arcsin((eta1/eta2)·sin θi) को डिग्री में लौटाता है (float)। theta_i_deg वास्तविक scalar है (array या None पर ValueError)। sign बना रहता है (negative angle of incidence पर negative refraction angle)। |(eta1/eta2) sin θi| > 1 हो तो nan (total internal reflection; केवल eta1 > eta2 होने पर होता है)। critical angle degrees(arcsin(eta2/eta1)) है। eta1 == eta2 हो तो angle of incidence जैसा है वैसा। vector के रूप में मोड़ना हो तो refract (batch के लिए glassmirror.refract_rays; refract में 1 ray में भी TIR हो तो पूरा batch None हो जाता है), reflectance के लिए fresnel_reflectance(cos(radians(θi)))। कोणों के array को एक साथ मोड़ने वाला कोई प्रवेश नहीं है —— acoustics की तरह refractive index के बजाय गति से सोचना हो तो eta = 1/c दें (n ∝ 1/c)।

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• snell_refraction — py -3.11 examples_3d/snell_refraction.py

वे अगले ops जिनसे type जुड़ता है (measurement को input के रूप में लेते हैं)

vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance

इसी category के (optics)

reflect · refract · fresnel_reflectance · normal_from_reflection


*Provenance: match3d.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.