refract — 3D optics op

• Data kinds: vector × normals → normals

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

उपयोग

Snell refraction (vector रूप)। d=incident (surface की ओर), n=incident तरफ़ का बाहरी normal, refractive index eta1→eta2।

transparent वस्तु से गुजरती ray के मुड़ने की सटीक गणना। total internal reflection (TIR) हो तो None। glass/lens/पानी के भीतर image distortion की गणना के लिए। contract एक अकेला vector है। (N,3) batch भी चलता है, पर 1 ray में भी TIR हो तो पूरा batch None होता है (per-ray mask नहीं)। ★batch हो तो 1-1 ray करके loop न चलाएँ, glassmirror.refract_rays का उपयोग करें —— वह हर ray के लिए TIR तय करता है और (दिशा, TIR mask) लौटाता है (TIR वाली ray specular reflection से भरी जाती हैं)। यह function "1 भी छूटे तो उत्तर न देने" वाले fail-closed प्रवेश के रूप में रखा गया है।

d, n को अंतिम axis को vector मानकर unit किया जाता है। n को incident side (जहाँ d·n < 0 हो उस दिशा) में दें। उल्टा देने पर cos θi negative हो जाता है और बिना exception के गलत दिशा लौटती है। लौटाया गया मान unit vector है (eta·d + (eta·cosθi − cosθt)·n, eta = eta1/eta2)। eta1 == eta2 हो तो d जैसा है वैसा लौटता है। कोण में काम करना हो तो snell_angle, reflectance के लिए fresnel_reflectance(cos_i, eta1, eta2)।

संदर्भ (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 जुड़ता है (normals को input के रूप में लेते हैं)

icp_point2plane · compute_fpfh · shot_descriptor · fuse_to_voxel · reflect · normal_consistency · ransac_cylinder · orient_normals

इसी category के (optics)

reflect · fresnel_reflectance · normal_from_reflection · snell_angle


*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.