kendama op• Data kinds: table → any
• Call: import fullseye as fs; fs.ledger.catch_plan_ballistic(kp: 'dict', *, v_max: 'float' = 2.0, a_max: 'float' = 20.0, g: 'float' = None, v_target: 'float' = 0.5, v_rel_max: 'float' = 1.0, n_planes: 'int' = 12, plane_step: 'float' = 0.02, clearance: 'bool' = False, margin: 'float' = 0.002) (implementation को सीधे call करना हो तो import kendama; kendama.catch_plan_ballistic(kp: 'dict', *, v_max: 'float' = 2.0, a_max: 'float' = 20.0, g: 'float' = None, v_target: 'float' = 0.5, v_rel_max: 'float' = 1.0, n_planes: 'int' = 12, plane_step: 'float' = 0.02, clearance: 'bool' = False, margin: 'float' = 0.002), registry से लेना हो तो opsdrive.get("catch_plan_ballistic"))
ढीली गेंद के (p, v) से parabola के closed form द्वारा cup का पहुँचने का बिंदु निकालने वाला plan। return value plan(t, p, v, cup_state) → dict।
पकड़ का निर्णय उस क्षण होता है जब "गेंद कप की खिड़की के ऊपरी सिरे (किनारे का तल + h_c + 1.5 r_b) में सापेक्ष गति ≤ v_rel_max के साथ नीचे की ओर प्रवेश करती है", इसलिए वह तल चुना जाता है जिस पर गेंद खिड़की के ऊपरी सिरे तक गति v_target से पहुँचे: शीर्ष z_a = z + v_z²/(2g) से z_c = z_a − (h_c + 1.5 r_b) − v_target²/(2g)। पहुँचने का समय z + v_z τ − ½ g τ² = z_c + h_c + 1.5 r_b का बाद वाला मूल (उतरते हुए) τ = (v_z + √(v_z² − 2g(z_c + h_c + 1.5 r_b − z)))/g है, और लक्ष्य xy = (x + v_x τ, y + v_y τ)। यदि कप bang-bang से τ तक नहीं पहुँच सकता (बंद-रूप गति-समय: विराम से 2√(d/a) या d/v + v/a, चल रहा हो तो वर्तमान गति सहित) तो तल को plane_step करके n_planes चरणों तक नीचे खोजा जाता है (जितना नीचे, उतना अधिक समय और उतनी अधिक पहुँच-गति)। किसी भी तल पर समय पर न पहुँचे तो सबसे ऊपरी चरण लौटाया जाता है और feasible=False (सबसे कम पहुँच-गति वाले तल पर दाँव। "सबसे निचले चरण की ओर भागने" पर पहुँचने से ठीक पहले τ → 0 के कारण हमेशा असंभव का निर्णय होता है, कप 20 cm डूब जाता है और गेंद गिर जाती है — मापकर अस्वीकार किया)।
रिटर्न मान {"target" (皿の中心), "t_hit", "z_plane", "v_ball_hit", "speed_hit", "feasible", "travel", "apex"}। clearance=True: जब तक गेंद का निचला सिरा किनारे के तल (+ margin) से ऊपर न निकल जाए, उस समय τ_up तक कप को पार्श्व में नहीं हिलाया जाता (केवल ऊँचाई तल तक) — बड़े कप का किनारा केंडामा का सबसे ऊँचा भाग है, इसलिए गेंद किनारे के तल से ऊपर हो तो xy कहीं भी हो, टकराव नहीं होता। समय पर पहुँचना τ − τ_up से तय होता है, और जिस तल को गेंद किनारे के तल से ऊपर नहीं पार करती वह असंभव है। रिटर्न मान में "landing" (गिरने का बिंदु = अंतिम लक्ष्य) और "wait" (τ_up, 0 = प्रतीक्षा नहीं) जोड़े जाते हैं। सीमाएँ (ईमानदारी से): कप लक्ष्य पर स्थिर होकर प्रतीक्षा करता है (पहुँचते समय सापेक्ष गति = गेंद की गति)। समय पर न पहुँचने वाले तल पर "गेंद के साथ कप नीचे करने" का गति-मिलान कार्यान्वित नहीं है — v_rel_max पर निर्भर है। कर्षण की उपेक्षा की गई है (60 mm गेंद की ≤ 0.5 s उड़ान में कुछ mm, और प्रत्येक step पर योजना दोबारा बनती है इसलिए मिट जाता है)।
खाली इनपुट (kp एक खाली dict) पर ValueError उठता है।
• 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 में दिए गए हैं।
• gallery_drive_kendama_racket — py -3.11 examples/gallery_drive_kendama_racket.py
any को input के रूप में लेते हैं)course_crank · course_s_curve · course_turnaround · course_slope · course_intersection · course_parallel_parking · course_crossing · course_road
kendama)kendama_params · elliptic_k_agm · pendulum_period_exact · pendulum_launch_speed · pendulum_rod_simulate · tether_tension_fixed · tether_slack_angle · swing_up_plan
*Provenance: kendama.py — DRIVE operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.