[−][src]Crate c2
Getting started
use c2::{prelude::*, AABB, Circle, Capsule, Poly, Transformation, Rotation}; use std::f32::consts::PI; fn main() { let circle = Circle::new([0.0, 0.0], 15.0); let aabb = AABB::new([10.0, 5.0], [20.0, 30.0]); let collided = circle.collides_with(&aabb); assert!(collided); let capsule = Capsule::new([5.0, 5.0], [15.0, 10.0], 1.0); let poly = Poly::from_slice(&[ [-1.0, -3.0], [1.0, -3.0], [1.0, 0.0], [0.0, 1.0], [-1.0, 0.0], ]); let collided = capsule.collides_with(&poly); assert!(!collided); let transformation = Transformation::new([5.0, 4.0], Rotation::radians(PI / 2.0)); let collided = circle.collides_with(&(poly, transformation)); assert!(collided); let manifold = circle.manifold(&poly); /* The manifold is used for resolving collisions and has the following methods: manifold.count() -> i32 manifold.depths() -> [f32; 2] manifold.contact_points() -> [Vec2; 2] manifold.normal() -> Vec2 */ let gjk_response = poly.gjk(&circle).run(); /* The result of the GJK algorithm: gjk_response.distance() -> f32 gjk_response.closest_points() -> (Vec2, Vec2) */ }
Check out the library this builds on top of for additional documentation. Please note the section entitled NUMERIC ROBUSTNESS.
Modules
prelude |
Structs
AABB | Rectangle with a min vector and a max vector |
Capsule | A capsule with a line segment and a radius |
Circle | A circle with a point and a radius |
GjkResponse | The result of the GJK function |
GjkRunner | A builder for running the GJK algorithm |
Manifold | Contains the data necessary for collision resolution |
Poly | A polygon with up to 8 sides |
Ray | A Ray struct for casting a ray |
RayCast | The result of the ray casting operations |
Rotation | Rotation, an angle |
ToiRunner | A builder for finding the time of impact for two shapes |
Transformation | For transforming the position and rotation of polygons |
Vec2 | A 2d vector |
Enums
Type | The type of the shape |
Type Definitions
GjkCache |