geometry op• 数据种类:primitive → measurement
• 调用: import fullseye as fs; fs.ledger.distance_segment_segment(p0, p1, q0, q1)(要直接调用实现,import match3d; match3d.distance_segment_segment(p0, p1, q0, q1);从台账取用则 ops3d.get("distance_segment_segment"))
• 经台账调用的返回值: fullseye.ledger.distance_segment_segment(...) 只返回声明的 out 类型 measurement 的值(底层函数还会返回辅助信息)。需要被丢弃的部分时,使用 fullseye.ledger.distance_segment_segment.raw(...),或直接调用 match3d.distance_segment_segment。
有限线段之间的最短距离及其最近点对。→ (distance, cp, cq)。
distance_line_line 是无限直线之间的距离,因此对分离的 2 条线段也可能返回 0(实测: 对 (0,0,0)-(1,0,0) 与 (5,0,0)-(6,0,0) 为 0.0,真值为 4.0)。手脚、机器人连杆、管道、工具都是有限的,因此在安全距离或干涉判定中使用无限直线版会低估危险(在 poc_safety_clearance 的实测中, 对同样 2 条线段低估了 87.6 %)。
Args:
p0, p1: 线段 1 的端点 (3,)。若 p0 == p1 则视为点。
q0, q1: 线段 2 的端点 (3,)。
Returns:
(distance, cp, cq): 最短距离 float,以及线段 1 侧、线段 2 侧的最近点
(3,)。distance == 0 表示 2 条线段相交(或接触)。
★经由台账(fullseye.ledger.distance_segment_segment)只返回声明的 out 类型
distance。也需要最近点时请用
fullseye.ledger.distance_segment_segment.raw(...)。
Raises:
ValueError: 端点无法转换为 (3,),或非有限时。
平行、退化(坍缩为点的线段)的情况也通过分支正确处理(Ericson, *Real-Time Collision Detection*, §5.1.9 的 clamped closest-point 法)。胶囊体(芯线 + 半径) 之间的距离为 distance - r1 - r2,干涉即其为负。
Reference (public): C. Ericson, *Real-Time Collision Detection*, Morgan Kaufmann 2005, §5.1.9 "Closest Points of Two Line Segments".
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• geometry_metrology — py -3.11 examples_3d/geometry_metrology.py
measurement 作为输入)vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle
geometry)line_from_2points · plane_from_3points · angle_3points · angle_between_lines · angle_between_planes · angle_line_plane · distance_point_plane · distance_point_line
*Provenance: match3d.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.