From 9bf1321f8f1d2e116f44c2461a53f302c4ef4171 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 8 Dec 2020 17:31:49 +0100 Subject: Outsource the contact manifold, SAT, and some shapes. --- src/geometry/polygon.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/geometry/polygon.rs') diff --git a/src/geometry/polygon.rs b/src/geometry/polygon.rs index d07cfd9..0bc3e56 100644 --- a/src/geometry/polygon.rs +++ b/src/geometry/polygon.rs @@ -1,7 +1,7 @@ #![allow(dead_code)] // TODO: remove this once we support polygons. use crate::math::{Isometry, Point, Vector}; -use ncollide::bounding_volume::AABB; +use buckler::bounding_volume::AABB; #[derive(Clone)] #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] @@ -27,7 +27,7 @@ impl Polygon { } /// Compute the axis-aligned bounding box of the polygon. - pub fn aabb(&self, pos: &Isometry) -> AABB { + pub fn aabb(&self, pos: &Isometry) -> AABB { let p0 = pos * self.vertices[0]; let mut mins = p0; let mut maxs = p0; -- cgit From e231bacec608fa5efd24f7a876572927dbd6c9c4 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Thu, 17 Dec 2020 10:24:36 +0100 Subject: Move all the contact manifold computations out of Rapier. --- src/geometry/polygon.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/geometry/polygon.rs') diff --git a/src/geometry/polygon.rs b/src/geometry/polygon.rs index 0bc3e56..15cf005 100644 --- a/src/geometry/polygon.rs +++ b/src/geometry/polygon.rs @@ -1,7 +1,7 @@ #![allow(dead_code)] // TODO: remove this once we support polygons. use crate::math::{Isometry, Point, Vector}; -use buckler::bounding_volume::AABB; +use eagl::bounding_volume::AABB; #[derive(Clone)] #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] -- cgit From 8fe2df126a279a435cc544b150aadf8f7b757868 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Thu, 17 Dec 2020 18:37:16 +0100 Subject: Remove some irrelevant code. --- src/geometry/polygon.rs | 78 ------------------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 src/geometry/polygon.rs (limited to 'src/geometry/polygon.rs') diff --git a/src/geometry/polygon.rs b/src/geometry/polygon.rs deleted file mode 100644 index 15cf005..0000000 --- a/src/geometry/polygon.rs +++ /dev/null @@ -1,78 +0,0 @@ -#![allow(dead_code)] // TODO: remove this once we support polygons. - -use crate::math::{Isometry, Point, Vector}; -use eagl::bounding_volume::AABB; - -#[derive(Clone)] -#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] -/// A convex planar polygon. -pub struct Polygon { - pub(crate) vertices: Vec>, - pub(crate) normals: Vec>, -} - -impl Polygon { - /// Builds a new polygon from a set of vertices and normals. - /// - /// The vertices must be ordered in such a way that two consecutive - /// vertices determines an edge of the polygon. For example `vertices[0], vertices[1]` - /// is an edge, `vertices[1], vertices[2]` is the next edge, etc. The last edge will - /// be `vertices[vertices.len() - 1], vertices[0]`. - /// The vertices must be given in counter-clockwise order. - /// The vertices must form a convex polygon. - /// - /// One normal must be provided per edge and mut point towards the outside of the polygon. - pub fn new(vertices: Vec>, normals: Vec>) -> Self { - Self { vertices, normals } - } - - /// Compute the axis-aligned bounding box of the polygon. - pub fn aabb(&self, pos: &Isometry) -> AABB { - let p0 = pos * self.vertices[0]; - let mut mins = p0; - let mut maxs = p0; - - for pt in &self.vertices[1..] { - let pt = pos * pt; - mins = mins.inf(&pt); - maxs = maxs.sup(&pt); - } - - AABB::new(mins.into(), maxs.into()) - } - - /// The vertices of this polygon. - pub fn vertices(&self) -> &[Point] { - &self.vertices - } - - pub(crate) fn support_point(&self, dir: &Vector) -> usize { - let mut best_dot = -f32::MAX; - let mut best_i = 0; - - for (i, pt) in self.vertices.iter().enumerate() { - let dot = pt.coords.dot(&dir); - if dot > best_dot { - best_dot = dot; - best_i = i; - } - } - - best_i - } - - pub(crate) fn support_face(&self, dir: &Vector) -> usize { - let mut max_dot = -f32::MAX; - let mut max_dot_i = 0; - - for (i, normal) in self.normals.iter().enumerate() { - let dot = normal.dot(dir); - if dot > max_dot { - max_dot = dot; - max_dot_i = i; - } - } - - max_dot_i - } -} -- cgit