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 }