//--------------------------------------------------------------------------------------------- /// <summary> /// Clamp length (modulus) of the elements in the complex array /// </summary> /// <param name="array"></param> /// <param name="fMinimum"></param> /// <param name="fMaximum"></param> static public void ClampLength(Complex[] array, double fMinimum, double fMaximum) { for (int i = 0; i < array.Length; i++) { array[i] = Complex.FromPolarCoordinates(Math.Max(fMinimum, Math.Min(fMaximum, array[i].Magnitude)), array[i].Phase); } }
/// <summary> /// Clamp elements in the complex array to real unit range (i.e. [0,1]) /// </summary> /// <param name="array"></param> static public void ClampToRealUnit(Complex[] array) { for (int i = 0; i < array.Length; i++) { array[i] = new Complex(Math.Min(Math.Max(array[i].Real, 0), 1), 0); } }
/// <summary> /// Clamp elements in the complex array to range [minimum,maximum] /// </summary> /// <param name="array"></param> /// <param name="minimum"></param> /// <param name="maximum"></param> static public void Clamp(Complex[] array, Complex minimum, Complex maximum) { for (int i = 0; i < array.Length; i++) { array[i] = new Complex(Math.Min(Math.Max(array[i].Real, minimum.Real), maximum.Real), Math.Min(Math.Max(array[i].Real, minimum.Imaginary), maximum.Imaginary); } }
/// <summary> /// Add a specific value to each element in the array /// </summary> /// <param name="array"></param> /// <param name="offset"></param> static public void Offset(Complex[] array, Complex offset) { int length = array.Length; for (int i = 0; i < length; i++) { array[i] += offset; } }
/// <summary> /// Multiply each element in the array by a specific value /// </summary> /// <param name="array"></param> /// <param name="scale"></param> static public void Scale(Complex[] array, Complex scale) { Debug.Assert(array != null); int length = array.Length; for (int i = 0; i < length; i++) { array[i] *= scale; } }
/// <summary> /// Multiply each element in the array by a specific value /// </summary> /// <param name="array"></param> /// <param name="scale"></param> /// <param name="start"></param> /// <param name="length"></param> static public void Scale(Complex[] array, Complex scale, int start, int length) { Debug.Assert(array != null); Debug.Assert(start >= 0); Debug.Assert(length >= 0); Debug.Assert((start + length) < array.Length); for (int i = 0; i < length; i++) { array[i + start] *= scale; } }
//--------------------------------------------------------------------------------------------- /// <summary> /// Shift (offset) the elements in the array /// </summary> /// <param name="array"></param> /// <param name="offset"></param> static public void Shift(Complex[] array, int offset) { Debug.Assert(array != null); Debug.Assert(offset >= 0); Debug.Assert(offset < array.Length); if (offset == 0) { return; } int length = array.Length; Complex[] temp = new Complex[length]; for (int i = 0; i < length; i++) { temp[(i + offset) % length] = array[i]; } for (int i = 0; i < length; i++) { array[i] = temp[i]; } }
public BasicVec3(SN.Vector3 v) { x = v.X; y = v.Y; z = v.Z; }
public BasicVec2(SN.Vector2 v) { x = v.X; y = v.Y; }
private static void DrawLineInternal( CanvasDrawingSession ds, Color pen, CanvasStrokeStyle ss, bool isStroked, ref N.Vector2 p0, ref N.Vector2 p1, double strokeWidth) { if (isStroked) { ds.DrawLine(p0, p1, isStroked ? pen : Colors.Transparent, (float)strokeWidth, ss); } }