public static Matrix4D GetArbitraryCoordSystem(Vector3D zaxis) { Vector3D xaxis; if (System.Math.Abs(zaxis.X) > System.Math.Abs(zaxis.Y)) { double num = 1.0 / System.Math.Sqrt(zaxis.X * zaxis.X + zaxis.Z * zaxis.Z); xaxis = new Vector3D(-zaxis.Z * num, 0.0, zaxis.X * num); } else { double num = 1.0 / System.Math.Sqrt(zaxis.Y * zaxis.Y + zaxis.Z * zaxis.Z); xaxis = new Vector3D(0.0, zaxis.Z * num, -zaxis.Y * num); } return(Transformation4D.smethod_0(xaxis, zaxis)); }