gfxmath_vec3/impls/cross/cross.rs
1use core::ops::{Add, Sub, Mul};
2use crate::Vec3;
3use crate::ops::Cross;
4
5/// ```
6/// use gfxmath_vec3::ops::Cross;
7/// use gfxmath_vec3::Vec3;
8///
9/// let a = Vec3::new(1.0, 3.0, 2.5);
10/// let b = Vec3::all(2.0);
11///
12/// let res = a.cross(b);
13///
14/// assert_eq!(1.0, res.x);
15/// assert_eq!(3.0, res.y);
16/// assert_eq!(-4.0, res.z);
17/// ```
18#[opimps::impl_ops(Cross)]
19fn cross<T>(self: Vec3<T>, rhs: Vec3<T>) -> Vec3<T>
20where T: Add<Output = T>
21 + Mul<Output = T>
22 + Sub<Output = T>
23 + Copy
24{
25 let l = self.as_slice();
26 let r = rhs.as_slice();
27
28 Vec3::new(
29 l[1] * r[2] - r[1] * l[2],
30 l[2] * r[0] - r[2] * l[0],
31 l[0] * r[1] - r[0] * l[1]
32 )
33}