cross: Vec3: implement rotate_{xy,xz,yz}
operations
This commit is contained in:
@@ -253,6 +253,22 @@ impl<R: Real> Vec3<R> {
|
||||
pub fn with_xy(&self, xy: Vec2<R>) -> Self {
|
||||
Self::new(xy.x(), xy.y(), self.z())
|
||||
}
|
||||
pub fn xz(&self) -> Vec2<R> {
|
||||
Vec2::new(self.x(), self.z())
|
||||
}
|
||||
pub fn with_xz(&self, xz: Vec2<R>) -> Self {
|
||||
// NB: the `Vec2` type calls these coordinates `x` and `y`
|
||||
// even though they represent `x` and `z` in this context.
|
||||
Self::new(xz.x(), self.y(), xz.y())
|
||||
}
|
||||
pub fn yz(&self) -> Vec2<R> {
|
||||
Vec2::new(self.y(), self.z())
|
||||
}
|
||||
pub fn with_yz(&self, yz: Vec2<R>) -> Self {
|
||||
// NB: the `Vec2` type calls these coordinates `x` and `y`
|
||||
// even though they represent `y` and `z` in this context.
|
||||
Self::new(self.x(), yz.x(), yz.y())
|
||||
}
|
||||
|
||||
pub fn distance(&self, other: Self) -> R {
|
||||
(*self - other).mag()
|
||||
@@ -365,6 +381,25 @@ impl<R: Real> Vec3<R> {
|
||||
pub fn floor(&self) -> Self {
|
||||
Self::new(self.x().floor(), self.y().floor(), self.z().floor())
|
||||
}
|
||||
|
||||
/// rotate in the xy plane
|
||||
pub fn rotate_xy(&self, angle: R) -> Self {
|
||||
self.with_xy(
|
||||
self.xy().rotate(angle)
|
||||
)
|
||||
}
|
||||
/// rotate in the xz plane
|
||||
pub fn rotate_xz(&self, angle: R) -> Self {
|
||||
self.with_xz(
|
||||
self.xz().rotate(angle)
|
||||
)
|
||||
}
|
||||
/// rotate in the yz plane
|
||||
pub fn rotate_yz(&self, angle: R) -> Self {
|
||||
self.with_yz(
|
||||
self.yz().rotate(angle)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl<R> Into<(R, R, R)> for Vec3<R> {
|
||||
|
Reference in New Issue
Block a user