noncoaxial_drawing — OPTICS drawing op

• Data kinds: table → table

• Call: import fullseye as fs; fs.ledger.noncoaxial_drawing(system, fields=None, rays=3, view='yz', scale=None, title=None, profile_points=61, rotate_deg=0, overlays=None) (implementation को सीधे call करना हो तो import optdraw; optdraw.noncoaxial_drawing(system, fields=None, rays=3, view='yz', scale=None, title=None, profile_points=61, rotate_deg=0, overlays=None), registry से लेना हो तो opsoptics.get("noncoaxial_drawing"))

उपयोग

मुड़ी हुई प्रणाली का अनुप्रस्थ-काट / setup drawing (table, drawing dict) — raytrace3d प्रणाली की सतहें, दर्पण, beamsplitter, image plane और किरणें global निर्देशांकों में meridional तल पर प्रक्षेपित।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

*system* は raytrace3d.noncoaxial_system の系(raytrace.lens_system の処方も受ける)。*view* は投影面:

"yz"(横軸 = 大域の z、縦軸 = y。x 軸まわりの折り返しはこの面に載る)/ "zx"(横軸 z、縦軸 x)。面は局所の子午面の sag 曲線(raytrace の円錐 + 非球面の式)を大域へ写して投影し、ガラスの群はコバの線で閉じ、鏡は裏に斜線、半透鏡は BS の印。光軸は座標系の原点の折れ線(細い一点鎖線)、絞りは口径の外の刻み、像面は像の座標系の線分(image_tilt で傾く)、有限の物体は物面の線分(object_tilt で傾く)。光線は視野ごとに色を分け、絞りの上で等間隔に絞りを狙った実光線(raytrace3d の Newton 法)。

*rotate_deg*(0 / 90 / 180 / 270)は紙の上で図を回す(同軸落射のように光が下から上へ進む装置を立てて描く)。*overlays* は別の系(例: 照明の枝 = 半透鏡で反射する系)の列で、その光線を照明の光線の層に重ねて描く(面は細線)。

寸法: 装置の占有の幅 W と高さ H(面・像面・光線の外接矩形)。注記: 光路長(第 1 面 → 像面の軸の長さ)、折り返しの角度。values: path_length / footprint / fold_angles_deg / 面ごとの大域の頂点 surfaces / 光線の大域の折れ線 rays / image_center。

पूरी family का input contract (fail-closed)

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।

उपयोग की विस्तृत guide

• optics_imaging family guide

संदर्भ (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 के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

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

• poc_noncoaxial_optics — py -3.11 examples/poc_noncoaxial_optics.py

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

abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd

इसी category के (drawing)

lens_section_drawing · vision_setup_drawing · lens_element_drawing · drawing_svg · drawing_dxf · drawing_raster · svg_entities · dxf_entities


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