gfxmath_vec4/impls/cross/cross.rs
1use crate::Vec4;
2use crate::ops::Cross;
3
4/// ```
5/// use gfxmath_vec4::ops::Cross;
6/// use gfxmath_vec4::Vec4;
7///
8/// let a = Vec4::<f32>::new(1.0, 3.0, 2.5, 0.0);
9/// let b = Vec4::all(2.0);
10///
11/// let res = a.cross(b);
12///
13/// assert_eq!(1.0, res.x);
14/// assert_eq!(3.0, res.y);
15/// assert_eq!(-4.0, res.z);
16/// assert_eq!(0.0, res.w);
17/// ```
18#[opimps::impl_ops(Cross)]
19fn cross(self: Vec4<f32>, rhs: Vec4<f32>) -> Vec4<f32> {
20 let l = self.as_slice();
21 let r = rhs.as_slice();
22
23 Vec4::new(
24 l[1] * r[2] - r[1] * l[2],
25 l[2] * r[0] - r[2] * l[0],
26 l[0] * r[1] - r[0] * l[1],
27 0.0
28 )
29}
30
31/// ```
32/// use gfxmath_vec4::ops::Cross;
33/// use gfxmath_vec4::Vec4;
34///
35/// let a = Vec4::<f64>::new(1.0, 3.0, 2.5, 0.0);
36/// let b = Vec4::all(2.0);
37///
38/// let res = a.cross(b);
39///
40/// assert_eq!(1.0, res.x);
41/// assert_eq!(3.0, res.y);
42/// assert_eq!(-4.0, res.z);
43/// assert_eq!(0.0, res.w);
44/// ```
45#[opimps::impl_ops(Cross)]
46fn cross(self: Vec4<f64>, rhs: Vec4<f64>) -> Vec4<f64> {
47 let l = self.as_slice();
48 let r = rhs.as_slice();
49
50 Vec4::new(
51 l[1] * r[2] - r[1] * l[2],
52 l[2] * r[0] - r[2] * l[0],
53 l[0] * r[1] - r[0] * l[1],
54 0.0
55 )
56}