/// <summary>
 ///   Returns a vector that is made from the smallest components of two vectors.
 /// </summary>
 /// <param name="lhs"> First vector. </param>
 /// <param name="rhs"> Second vector. </param>
 /// <returns>Vector that is made from the smallest components of two vectors.</returns>
 public static Vector3I Min(Vector3I lhs, Vector3I rhs)
 {
     return new Vector3I(MathUtils.Min(lhs.X, rhs.X), MathUtils.Min(lhs.Y, rhs.Y), MathUtils.Min(lhs.Z, rhs.Z));
 }
 /// <summary>
 ///   Constructor.
 /// </summary>
 /// <param name="vector"> Initial vector. </param>
 public Vector3I(Vector3I vector)
 {
     this.X = vector.X;
     this.Y = vector.Y;
     this.Z = vector.Z;
 }
 /// <summary>
 ///   Calculates the square distance between this and the passed vector.
 /// </summary>
 /// <param name="vector"> Vector to compute square distance to. </param>
 /// <returns> Square distance between this and the passed vector. </returns>
 public int GetSquareDistance(Vector3I vector)
 {
     return MathUtils.Pow2(vector.X - this.X) + MathUtils.Pow2(vector.Y - this.Y)
            + MathUtils.Pow2(vector.Z - this.Z);
 }
 /// <summary>
 ///   Calculates the distance between this and the passed vector.
 /// </summary>
 /// <param name="vector"> Vector to compute distance to. </param>
 /// <returns> Distance between this and the passed vector. </returns>
 public float GetDistance(Vector3I vector)
 {
     return MathUtils.Sqrt(this.GetSquareDistance(vector));
 }
 /// <summary>
 ///   Determines whether the specified <see cref="Vector3I" /> is equal to the current <see cref="Vector3I" />.
 /// </summary>
 /// <returns>
 ///   true if the specified <see cref="Vector3I" /> is equal to the current <see cref="Vector3I" />; otherwise, false.
 /// </returns>
 /// <param name="other">
 ///   The <see cref="Vector3I" /> to compare with the current <see cref="Vector3I" />.
 /// </param>
 public bool Equals(Vector3I other)
 {
     return this.X == other.X && this.Y == other.Y && this.Z == other.Z;
 }
 /// <summary>
 ///   Calculates the dot product of the two passed vectors. See http://en.wikipedia.org/wiki/Dot_product for more details.
 /// </summary>
 /// <param name="a"> First vector. </param>
 /// <param name="b"> Second vector. </param>
 /// <returns> Dot product of the two passed vectors. </returns>
 public static int Dot(Vector3I a, Vector3I b)
 {
     return (a.X * b.X) + (a.Y * b.Y) + (a.Z * b.Z);
 }
 /// <summary>
 ///   Calculates the dot product of this and the passed vector. See http://en.wikipedia.org/wiki/Dot_product for more
 ///   details.
 /// </summary>
 /// <param name="vector"> Vector to calculate dot product with. </param>
 /// <returns> Dot product of this and the passed vector. </returns>
 public int CalculateDotProduct(Vector3I vector)
 {
     return Dot(this, vector);
 }