drawing op• Data kinds: table → table
• Call: import fullseye as fs; fs.ledger.lens_element_drawing(system, element=0, tolerances=None, outer_diameter_mm=None, clear_aperture_mm=None, chamfer_mm=0.2, irregularity_fringes=None, surface_imperfections=None, stress_birefringence=20.0, bubbles='1/3x0.16', inhomogeneity='2/1;1', trials=200, seed=0, radius_tolerance='radius', plane_power_fringes=2.0, scale=None, title=None) (implementation को सीधे call करना हो तो import optdraw; optdraw.lens_element_drawing(system, element=0, tolerances=None, outer_diameter_mm=None, clear_aperture_mm=None, chamfer_mm=0.2, irregularity_fringes=None, surface_imperfections=None, stress_birefringence=20.0, bubbles='1/3x0.16', inhomogeneity='2/1;1', trials=200, seed=0, radius_tolerance='radius', plane_power_fringes=2.0, scale=None, title=None), registry से लेना हो तो opsoptics.get("lens_element_drawing"))
एकल लेंस का निर्माण-चित्र (table, drawing dict) — ISO 10110 संकेतन में section view, तीन भागों की data table और title block।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
*system* の *element* 番目のガラス(前から 0, 1, …)を描く。データ欄は左が第 1 面、右が第 2 面、中央が材料:
• 面: R(曲率半径、凸は CX・凹は CC、平面は ∞)と公差、⌀e(有効径)、3/A(B)(面形状の公差: A = 曲率の誤差による sag の誤差、B = 不規則性、どちらも λ = 546.07 nm の干渉縞の本数。R の公差を寸法で書くときは A を - にする —— ISO 10110-5 の慣行)、4/σ(面の傾き = 偏心の公差、分)、5/N×A (表面のきず)。
• 材料: n_d と ν_d(式で評価した値。社名の硝材名は書かない)と公差、0/(応力複屈折 nm/cm)、1/(泡と異物)、2/(不均質と脈理)。
• 図: 中心厚と公差、外径と公差、面取り(保護面取り)、光軸。
公差は raytrace.tolerance_analysis の公差の辞書(*tolerances*、既定は同じ既定値 radius_pct 0.5 / thickness_mm 0.05 / index 0.001 / tilt_deg 0.05)から写す: 中心厚 ±thickness_mm、n_d ±index、4/ = tilt_deg × 60 分、曲率の公差 radius_pct は R の ± と、有効径の縁での sag の差 |sag(R(1 ± p)) − sag(R)| を縞の本数(1 本 = λ/2)にする。*radius_tolerance* = "radius"(既定)は R の欄に ±ΔR を書いて 3/-(B) とし、縞の換算は注記に残す。"fringes" は R を公称値だけにして 3/A(B) の A に縞の本数を書く。B(不規則性、*irregularity_fringes*)の既定は "radius" で 1、"fringes" で A/4(最低 0.5)。平面は曲率の公差が無いので、A は *plane_power_fringes*(既定 2 本)。同じ公差で tolerance_analysis を回した EFL の 5〜95 % の幅を注記に入れる(*trials* 回、*seed*)—— 図の公差が光学系の何を動かすかを製作図に残すため。
返り値の values: R1 / R2 / center_thickness / outer_diameter / clear_aperture / nd / vd / fringes_power / tilt_arcmin / efl / efl_p5 / efl_p95。平面の R と、分散の無い媒質の vd は inf(非有限は契約、lens_system の規約どおり)。接合レンズ群(面が 3 つ以上のガラスの連続)は 1 枚の組図にする: 断面に各レンズと接合面、データ欄は面ごとの R・有効径と、レンズごとの材料(n_d・ν_d)と中心厚(values の R / center_thickness / nd / vd は列)。非球面・円錐面は ISO 10110-12 の sag の表(高さ h と sag z(h)、式と係数)を図に足し、values の sag_tables に同じ数を残す(門は図から読み戻して raytrace の sag の式と突き合わせる)。
optics के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):
• Unit argument के नाम में ही लिखी होती है — _mm / _um / _deg / _mrad। mm और µm की गड़बड़ी crash नहीं करती, बल्कि "सही दिखने वाला पर गलत उत्तर" देती है, इसलिए नाम से इसे रोका जाता है। मान के आकार से unit का अनुमान बिल्कुल नहीं लगाया जाता।
• String से ValueError — float('50') सफल हो जाता है, इसलिए बिना parse किया config value length के रूप में निकल जाता (मापा गया: thin_lens('50', '200') सही दिखने वाला 66.667 mm लौटा रहा था)। bool को भी True == 1 वाले implicit promotion के रूप में अस्वीकार किया जाता है।
• complex / masked array से ValueError (केवल real-valued slots; imaginary part को चुपचाप छोड़ना या mask हटाना अस्वीकार)। हर input पर NaN/Inf से ValueError।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: focal length 0, radius of curvature 0, refractive index <= 0, पूरी तरह opaque aperture (सब 0, इसलिए normalisation 0/0), ऐसा PSF जिसका योग <= 0 हो, S0 = 0 वाला Stokes vector, और front focal point पर रखा object (image अनंत पर)।
• केवल 2 ops non-finite value लौटाते हैं, और वह भी contract के रूप में लिखा हुआ: depth_of_field hyperfocal distance से आगे far_mm = inf (hyperfocal distance की परिभाषा यही है) और gaussian_beam waist पर wavefront_radius_mm = inf (plane wavefront की radius of curvature)। दोनों साथ में एक finite साथी (far_is_infinite / curvature_per_mm) भी लौटाते हैं। इसके अलावा कोई भी चुपचाप आया NaN/Inf अंदर ही पकड़ा जाता है और ValueError देता है — "float64 overflow हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता।
• Size की सीमा: generate होने वाले grid के लिए optics.MAX_GRID (4096), दिए गए field/PSF/aperture के लिए optics.MAX_FIELD_ELEMENTS (2^24), ABCD element chain के लिए optics.MAX_SYSTEM_ELEMENTS (1024), Zernike के लिए MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25)। छोटे argument से बहुत बड़ा internal allocation होने वाले रास्तों (मापा गया: n_max=40 × 4096² पर 108 GB) को fail-closed ढंग से बंद किया गया है।
• भौतिक रूप से असंभव states भी अस्वीकार: degree of polarisation > 1 वाला Stokes vector, ऋणात्मक transmittance, ऋणात्मक intensity, और n-|m| odd जैसे अमान्य Zernike indices।
• 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 के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• poc_optics_drawings — py -3.11 examples/poc_optics_drawings.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
drawing)lens_section_drawing · vision_setup_drawing · drawing_svg · drawing_dxf · drawing_raster · svg_entities · dxf_entities · noncoaxial_drawing
*Provenance: optdraw.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.