3 dimensional Rotation around point
fn rotate_around_point(point: (f64, f64, f64), axis: (f64, f64, f64), angle: f64) -> (f64, f64, f64) { let (px, py, pz) = point; let (ax, ay, az) = axis; let cosa = angle.cos(); let sina = angle.sin(); let x = (ax * (ax * px + ay * py + az * pz) * (1.0 - cosa) + px * cosa + (-az * py + ay * pz) * sina); let y = (ay * (ax * px + ay * py + az * pz) * (1.0 - cosa) + py * cosa + (az * px - ax * pz) * sina); let z = (az * (ax * px + ay * py + az * pz) * (1.0 - cosa) + pz * cosa