Skip to main content

gfxmath_vec3/impls/dot/
dot.rs

1use core::ops::{Add, Mul};
2use crate::ops::Dot;
3use crate::Vec3;
4
5/// ```
6/// use gfxmath_vec3::{Vec3, ops::Dot};
7/// 
8/// let a = Vec3::new(3.0, 4.0, 5.0);
9/// let b = Vec3::new(2.0, 1.0, 3.0);
10/// 
11/// let res = a.dot(b);
12/// 
13/// assert_eq!(25.0, res);
14/// ```
15#[opimps::impl_ops(Dot)]
16#[inline]
17fn dot<T>(self: Vec3<T>, rhs: Vec3<T>) -> T
18where T: Add<Output = T>
19    + Mul<Output = T>
20    + Copy 
21{
22    let l = self.as_slice();
23    let r = rhs.as_slice();
24
25    l[0] * r[0]
26    + l[1] * r[1]
27    + l[2] * r[2]
28}