/// <summary> /// Multiply vector with a number /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static VectorNInt operator *(VectorNInt a, int b) { VectorNInt output = new VectorNInt(a.Dimensions); for (int i = 0; i < a.Dimensions; i++) { output.SetDimension(i, a.GetDimension(i) * b); } return(output); }
/// <summary> /// Subtract two vectors /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static VectorNInt operator -(VectorNInt a, VectorNInt b) { if (a.Dimensions != b.Dimensions) { return(null); } VectorNInt output = new VectorNInt(a.Dimensions); for (int i = 0; i < a.Dimensions; i++) { output.SetDimension(i, a.GetDimension(i) - b.GetDimension(i)); } return(output); }
/// <summary> /// Calculate dot product of two vectors /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static int DotProduct(VectorNInt a, VectorNInt b) { if (a.Dimensions != b.Dimensions) { return(0); } int sum = 0; for (int i = 0; i < a.Dimensions; i++) { sum += a.GetDimension(i) * b.GetDimension(i); } return(sum); }
/// <summary> /// Manhattan distance between 2 vectors /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static int DistanceManhattan(VectorNInt a, VectorNInt b) { if (a.Dimensions != b.Dimensions) { return(0); } int sum = 0; for (int i = 0; i < a.Dimensions; i++) { sum += Math.Abs(a.GetDimension(i) - b.GetDimension(i)); } return(sum); }
/// <summary> /// Distance between 2 vectors /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static double Distance(VectorNInt a, VectorNInt b) { if (a.Dimensions != b.Dimensions) { return(0); } double sum = 0; for (int i = 0; i < a.Dimensions; i++) { sum += Math.Pow(a.GetDimension(i) - b.GetDimension(i), 2); } return(Math.Sqrt(sum)); }
/// <summary> /// Cross product of two vectors /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static VectorNInt operator *(VectorNInt a, VectorNInt b) { if (a.Dimensions != b.Dimensions) { return(null); } VectorNInt output = new VectorNInt(a.Dimensions); for (int i = 0; i < a.Dimensions; i++) { // TODO: calculate cross product // https://math.stackexchange.com/questions/2371022/cross-product-in-higher-dimensions/2371039 // f**k it, not happening } return(output); }
public bool Equals(VectorNInt other) { // check dimension count if (Dimensions != other.Dimensions) { return(false); } // check if each dimension is close for (int i = 0; i < Dimensions; i++) { // stop after first which differs if (Math.Abs(GetDimension(i) - other.GetDimension(i)) > 0.000001) { return(false); } } return(true); }