notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

vec3.rs (812B)


      1 #[derive(Debug, Clone, Copy)]
      2 pub struct Vec3 {
      3     pub x: f32,
      4     pub y: f32,
      5     pub z: f32,
      6 }
      7 
      8 impl Vec3 {
      9     pub fn new(x: f32, y: f32, z: f32) -> Self {
     10         Vec3 { x, y, z }
     11     }
     12 
     13     pub fn squared_length(&self) -> f32 {
     14         self.x * self.x + self.y * self.y + self.z * self.z
     15     }
     16 
     17     pub fn length(&self) -> f32 {
     18         self.squared_length().sqrt()
     19     }
     20 
     21     pub fn normalize(&self) -> Vec3 {
     22         let len = self.length();
     23         if len != 0.0 {
     24             Vec3 {
     25                 x: self.x / len,
     26                 y: self.y / len,
     27                 z: self.z / len,
     28             }
     29         } else {
     30             // Return zero vector if length is zero to avoid NaNs
     31             Vec3 {
     32                 x: 0.0,
     33                 y: 0.0,
     34                 z: 0.0,
     35             }
     36         }
     37     }
     38 }