aboutsummaryrefslogtreecommitdiff
path: root/src/utils.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils.rs')
-rw-r--r--src/utils.rs163
1 files changed, 2 insertions, 161 deletions
diff --git a/src/utils.rs b/src/utils.rs
index 5025744..102c85f 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -1,8 +1,8 @@
//! Miscellaneous utilities.
use na::{
- Matrix1, Matrix2, Matrix3, Point2, Point3, RowVector2, Scalar, SimdRealField, UnitComplex,
- UnitQuaternion, Vector1, Vector2, Vector3,
+ Matrix1, Matrix2, Matrix3, RowVector2, Scalar, SimdRealField, UnitComplex, UnitQuaternion,
+ Vector1, Vector2, Vector3,
};
use num::Zero;
use simba::simd::SimdValue;
@@ -90,35 +90,6 @@ impl SimdSign<SimdReal> for SimdReal {
}
}
-pub(crate) trait SimdComponent: Sized {
- type Element;
-
- fn min_component(self) -> Self::Element;
- fn max_component(self) -> Self::Element;
-}
-
-impl SimdComponent for Real {
- type Element = Real;
-
- fn min_component(self) -> Self::Element {
- self
- }
- fn max_component(self) -> Self::Element {
- self
- }
-}
-
-impl SimdComponent for SimdReal {
- type Element = Real;
-
- fn min_component(self) -> Self::Element {
- self.simd_horizontal_min()
- }
- fn max_component(self) -> Self::Element {
- self.simd_horizontal_max()
- }
-}
-
/// Trait to compute the orthonormal basis of a vector.
pub trait SimdBasis: Sized {
/// The type of the array of orthonormal vectors.
@@ -166,89 +137,6 @@ impl<N: SimdRealCopy + SimdSign<N>> SimdBasis for Vector3<N> {
}
}
-pub(crate) trait SimdVec: Sized {
- type Element;
-
- fn horizontal_inf(&self) -> Self::Element;
- fn horizontal_sup(&self) -> Self::Element;
-}
-
-impl<N: Scalar + Copy + SimdComponent> SimdVec for Vector2<N>
-where
- N::Element: Scalar,
-{
- type Element = Vector2<N::Element>;
-
- fn horizontal_inf(&self) -> Self::Element {
- Vector2::new(self.x.min_component(), self.y.min_component())
- }
-
- fn horizontal_sup(&self) -> Self::Element {
- Vector2::new(self.x.max_component(), self.y.max_component())
- }
-}
-
-impl<N: Scalar + Copy + SimdComponent> SimdVec for Point2<N>
-where
- N::Element: Scalar,
-{
- type Element = Point2<N::Element>;
-
- fn horizontal_inf(&self) -> Self::Element {
- Point2::new(self.x.min_component(), self.y.min_component())
- }
-
- fn horizontal_sup(&self) -> Self::Element {
- Point2::new(self.x.max_component(), self.y.max_component())
- }
-}
-
-impl<N: Scalar + Copy + SimdComponent> SimdVec for Vector3<N>
-where
- N::Element: Scalar,
-{
- type Element = Vector3<N::Element>;
-
- fn horizontal_inf(&self) -> Self::Element {
- Vector3::new(
- self.x.min_component(),
- self.y.min_component(),
- self.z.min_component(),
- )
- }
-
- fn horizontal_sup(&self) -> Self::Element {
- Vector3::new(
- self.x.max_component(),
- self.y.max_component(),
- self.z.max_component(),
- )
- }
-}
-
-impl<N: Scalar + Copy + SimdComponent> SimdVec for Point3<N>
-where
- N::Element: Scalar,
-{
- type Element = Point3<N::Element>;
-
- fn horizontal_inf(&self) -> Self::Element {
- Point3::new(
- self.x.min_component(),
- self.y.min_component(),
- self.z.min_component(),
- )
- }
-
- fn horizontal_sup(&self) -> Self::Element {
- Point3::new(
- self.x.max_component(),
- self.y.max_component(),
- self.z.max_component(),
- )
- }
-}
-
pub(crate) trait SimdCrossMatrix: Sized {
type CrossMat;
type CrossMatTr;
@@ -463,28 +351,21 @@ impl<N: SimdRealCopy> SimdQuat<N> for UnitQuaternion<N> {
pub(crate) trait SimdAngularInertia<N> {
type AngVector;
- type LinVector;
type AngMatrix;
fn inverse(&self) -> Self;
- fn transform_lin_vector(&self, pt: Self::LinVector) -> Self::LinVector;
fn transform_vector(&self, pt: Self::AngVector) -> Self::AngVector;
fn squared(&self) -> Self;
- fn transform_matrix(&self, mat: &Self::AngMatrix) -> Self::AngMatrix;
fn into_matrix(self) -> Self::AngMatrix;
}
impl<N: SimdRealCopy> SimdAngularInertia<N> for N {
type AngVector = N;
- type LinVector = Vector2<N>;
type AngMatrix = N;
fn inverse(&self) -> Self {
simd_inv(*self)
}
- fn transform_lin_vector(&self, pt: Vector2<N>) -> Vector2<N> {
- pt * *self
- }
fn transform_vector(&self, pt: N) -> N {
pt * *self
}
@@ -493,10 +374,6 @@ impl<N: SimdRealCopy> SimdAngularInertia<N> for N {
*self * *self
}
- fn transform_matrix(&self, mat: &Self::AngMatrix) -> Self::AngMatrix {
- *mat * *self
- }
-
fn into_matrix(self) -> Self::AngMatrix {
self
}
@@ -504,7 +381,6 @@ impl<N: SimdRealCopy> SimdAngularInertia<N> for N {
impl SimdAngularInertia<Real> for SdpMatrix3<Real> {
type AngVector = Vector3<Real>;
- type LinVector = Vector3<Real>;
type AngMatrix = Matrix3<Real>;
fn inverse(&self) -> Self {
@@ -540,10 +416,6 @@ impl SimdAngularInertia<Real> for SdpMatrix3<Real> {
}
}
- fn transform_lin_vector(&self, v: Vector3<Real>) -> Vector3<Real> {
- self.transform_vector(v)
- }
-
fn transform_vector(&self, v: Vector3<Real>) -> Vector3<Real> {
let x = self.m11 * v.x + self.m12 * v.y + self.m13 * v.z;
let y = self.m12 * v.x + self.m22 * v.y + self.m23 * v.z;
@@ -559,16 +431,10 @@ impl SimdAngularInertia<Real> for SdpMatrix3<Real> {
self.m13, self.m23, self.m33,
)
}
-
- #[rustfmt::skip]
- fn transform_matrix(&self, m: &Matrix3<Real>) -> Matrix3<Real> {
- *self * *m
- }
}
impl SimdAngularInertia<SimdReal> for SdpMatrix3<SimdReal> {
type AngVector = Vector3<SimdReal>;
- type LinVector = Vector3<SimdReal>;
type AngMatrix = Matrix3<SimdReal>;
fn inverse(&self) -> Self {
@@ -593,10 +459,6 @@ impl SimdAngularInertia<SimdReal> for SdpMatrix3<SimdReal> {
}
}
- fn transform_lin_vector(&self, v: Vector3<SimdReal>) -> Vector3<SimdReal> {
- self.transform_vector(v)
- }
-
fn transform_vector(&self, v: Vector3<SimdReal>) -> Vector3<SimdReal> {
let x = self.m11 * v.x + self.m12 * v.y + self.m13 * v.z;
let y = self.m12 * v.x + self.m22 * v.y + self.m23 * v.z;
@@ -623,27 +485,6 @@ impl SimdAngularInertia<SimdReal> for SdpMatrix3<SimdReal> {
self.m13, self.m23, self.m33,
)
}
-
- #[rustfmt::skip]
- fn transform_matrix(&self, m: &Matrix3<SimdReal>) -> Matrix3<SimdReal> {
- let x0 = self.m11 * m.m11 + self.m12 * m.m21 + self.m13 * m.m31;
- let y0 = self.m12 * m.m11 + self.m22 * m.m21 + self.m23 * m.m31;
- let z0 = self.m13 * m.m11 + self.m23 * m.m21 + self.m33 * m.m31;
-
- let x1 = self.m11 * m.m12 + self.m12 * m.m22 + self.m13 * m.m32;
- let y1 = self.m12 * m.m12 + self.m22 * m.m22 + self.m23 * m.m32;
- let z1 = self.m13 * m.m12 + self.m23 * m.m22 + self.m33 * m.m32;
-
- let x2 = self.m11 * m.m13 + self.m12 * m.m23 + self.m13 * m.m33;
- let y2 = self.m12 * m.m13 + self.m22 * m.m23 + self.m23 * m.m33;
- let z2 = self.m13 * m.m13 + self.m23 * m.m23 + self.m33 * m.m33;
-
- Matrix3::new(
- x0, x1, x2,
- y0, y1, y2,
- z0, z1, z2,
- )
- }
}
// This is an RAII structure that enables flushing denormal numbers