use crate::math::{Point, Real, Vector};
use crate::utils::WBasis;
use na::{Unit, Vector5};
#[derive(Copy, Clone)]
#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
pub struct RevoluteJoint {
pub local_anchor1: Point<Real>,
pub local_anchor2: Point<Real>,
pub local_axis1: Unit<Vector<Real>>,
pub local_axis2: Unit<Vector<Real>>,
pub basis1: [Vector<Real>; 2],
pub basis2: [Vector<Real>; 2],
pub impulse: Vector5<Real>,
}
impl RevoluteJoint {
pub fn new(
local_anchor1: Point<Real>,
local_axis1: Unit<Vector<Real>>,
local_anchor2: Point<Real>,
local_axis2: Unit<Vector<Real>>,
) -> Self {
Self {
local_anchor1,
local_anchor2,
local_axis1,
local_axis2,
basis1: local_axis1.orthonormal_basis(),
basis2: local_axis2.orthonormal_basis(),
impulse: na::zero(),
}
}
}