#碰撞 #2d #几何 #gjk

lgeo

2D 几何库,专注于碰撞计算

8 个稳定版本

1.0.7 2022年4月11日
1.0.6 2022年4月9日
1.0.3 2022年4月8日
1.0.2 2022年4月6日

#1989算法

每月22次下载

MIT 许可证

17KB
398

L-Geo

Documentation Version License

2D 几何库,用 Rust 编写,基于 lmaths

提供经典 2D 形状,如

  • 矩形
  • 凸多边形

它实现了用于计算碰撞的 GJK 算法,以及用于提取碰撞信息的 EPA 算法(尚未开发)。

示例

首先,始终创建一个 GJK 结构体,其中包含您的设置,如接触容差

let gjk = GJK::new();

然后您可以开始创建形状

let c = Circle::new(Vector2::new(4.6, -3.2), 1.43);
let r = AABB::new(Vector2::new(-1.0, 0.5), Vector2::new(2.0, 1.0));
let p = Polygon::new(Vector2::new(0.0, 0.0),
                    vec![Vector2::new(0.0, 0.5),
                         Vector2::new(-1.5, -0.5),
                         Vector2::new(-3.0, 0.5),
                    ]);

最后,您可以检查它们之间的碰撞。将结果转换为布尔值是通过调用 result.is_some() 来完成的,因为 intersect() 函数返回 GJK 的最终单纯形。

let c_vs_r = gjk.intersect(&c, &r).is_some(); // False
let c_vs_p = gjk.intersect(&c, &p).is_some(); // False
let r_vs_p = gjk.intersect(&r, &p).is_some(); // True

依赖关系

~85KB