swarmflow op• 数据种类:table → table
• 调用: import fullseye as fs; fs.ledger.stagnation_from_centerline(field, speed=None, d_range=(0.04, 0.6), min_points: 'int' = 4, n_iter: 'int' = 80) -> 'dict'(要直接调用实现,import swarmflow; swarmflow.stagnation_from_centerline(field, speed=None, d_range=(0.04, 0.6), min_points: 'int' = 4, n_iter: 'int' = 80) -> 'dict';从台账取用则 opsdrive.get("stagnation_from_centerline"))
将中心线上的亏损线性化,读取上游的撞击点(驻点)、障碍物中心与半径(实现 1,只用上游的点)。
1. 在亏损(3 × 3 平均)超过 d_range 上限的网格中,将最上游者视为"撞击点附近"。
2. 在其稍上游的列(4 列)中,用抛物线以亚网格精度求亏损最大的行,取平均作为中心线 y_c (上游亏损 R²(Δx² − Δy²)/(Δx² + Δy²)² 在 Δy = 0 处最大)。
3. 在 y_c 高度上以行间一次插值取亏损,对位于撞击点附近以上游且在 d_range 内的网格, 以加权最小二乘拟合 1/√d = (x_c − x)/R(速度噪声 σ_d 在 1/√d 中增大为 σ_d/(2d^{3/2}), 故权重为 d^{3/2} —— 亏损小的远处点会因噪声而剧烈波动):R = −1/斜率,x_c = 截距 × R。驻点 = (x_c − R, y_c)。
4. 未给定 speed 时,用闭式从上游边缘的 u 反除以重新估计 U,并重复 3(直到 U 的变化小于 1e-9 或达 n_iter 次。收敛为一阶,在 R = 0.6、到边缘距离 3 的场中约 30 次)。上游边缘同样按 1/r² 亏损(R = 0.6、距离 3 时为 4 %),若直接以边缘中位数作为 U,直线会弯曲。
Returns:
dict: stagnation (x, y)、center (x, y)、radius、n_used、rms_residual(1/√d 拟合的残差)、
speed、ok(点数足够且斜率为负时为 True)。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• 算法的正典(作者、年份)与用途见上面的族使用指南。
• poc_swarm_obstacle_from_flow — py -3.11 examples/poc_swarm_obstacle_from_flow.py
table 作为输入)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
swarmflow)sph_kernel · sph_density_pressure · swarm_simulate · swarm_render_overhead · swarm_field_from_tracks · swarm_field_from_piv · potential_flow_cylinder · velocity_deficit_map
*Provenance: swarmflow.py — DRIVE 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.