You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust下基于SFCGAL获取直骨架M值距离的技术疑问

在Rust中通过SFCGAL高效获取直骨架的M值距离

你当前的问题是调用straight_skeleton_distance_in_m()生成直骨架后,无法高效获取每个点对应的M值(距离信息)——to_coordinates()用(f64, f64)类型接收会丢失M值,转WKT或手动过滤原始点又效率低下。

解决核心是使用支持M分量的坐标类型接收转换结果,straight_skeleton_distance_in_m()返回的几何中,每个点的M字段已经存储了到原始多边形边界的距离,直接读取即可:

// 用包含X、Y、M的三元组类型接收坐标序列,第三个元素就是距离值
let coords_with_distance: CoordSeq<(f64, f64, f64)> = out.to_coordinates().unwrap();

// 遍历提取每个点的坐标与距离
for (x, y, distance) in coords_with_distance {
    // 处理坐标和距离,例如打印或存储
    println!("坐标({}, {}) 到边界的距离: {}", x, y, distance);
}

如果需要仅保留骨架中间的点(排除原始多边形的边界点),可以通过M值快速过滤——边界点的距离值为0,内部骨架点的距离大于0:

let inner_skeleton_points: Vec<((f64, f64), f64)> = coords_with_distance.into_iter()
    .filter(|&(_, _, dist)| dist > 0.0)
    .map(|(x, y, dist)| ((x, y), dist))
    .collect();

这种方式直接从底层坐标序列读取M值,无需额外格式转换或低效遍历,是效率最高的实现方式。

内容的提问来源于stack exchange,提问作者LeXav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:45:58