pub fn nrm_cross_vec3(n1: &Normal3f, v2: &Vector3f) -> Vector3f {
    let n1x: f64 = n1.x as f64;
    let n1y: f64 = n1.y as f64;
    let n1z: f64 = n1.z as f64;
    let v2x: f64 = v2.x as f64;
    let v2y: f64 = v2.y as f64;
    let v2z: f64 = v2.z as f64;
    Vector3f {
        x: ((n1y * v2z) - (n1z * v2y)) as Float,
        y: ((n1z * v2x) - (n1x * v2z)) as Float,
        z: ((n1x * v2y) - (n1y * v2x)) as Float,
    }
}
/// Given a normal and a vector in 3D, the cross product is a vector
/// that is perpendicular to both of them.
Given a normal and a vector in 3D, the cross product is a vector
that is perpendicular to both of them.
Given a normal and a vector in 3D the cross product is a vector that is perpendicular to both of them .
pub fn nrm_cross_vec3(n1: &Normal3f, v2: &Vector3f) -> Vector3f {
    let n1x: f64 = n1.x as f64;
    let n1y: f64 = n1.y as f64;
    let n1z: f64 = n1.z as f64;
    let v2x: f64 = v2.x as f64;
    let v2y: f64 = v2.y as f64;
    let v2z: f64 = v2.z as f64;
    Vector3f {
        x: ((n1y * v2z) - (n1z * v2y)) as Float,
        y: ((n1z * v2x) - (n1x * v2z)) as Float,
        z: ((n1x * v2y) - (n1y * v2x)) as Float,
    }
}
pub fn nrm_cross_vec3 ( n1 : & Normal3f , v2 : & Vector3f ) -> Vector3f { let n1x : f64 = n1 . x as f64 ; let n1y : f64 = n1 . y as f64 ; let n1z : f64 = n1 . z as f64 ; let v2x : f64 = v2 . x as f64 ; let v2y : f64 = v2 . y as f64 ; let v2z : f64 = v2 . z as f64 ; Vector3f { x : ( ( n1y * v2z ) - ( n1z * v2y ) ) as Float , y : ( ( n1z * v2x ) - ( n1x * v2z ) ) as Float , z : ( ( n1x * v2y ) - ( n1y * v2x ) ) as Float , } }
Given a normal and a vector in 3D, the cross product is a vector
that is perpendicular to both of them.
Given a normal and a vector in 3D the cross product is a vector that is perpendicular to both of them .
n1
&Normal3f
v2
&Vector3f