예제 #1
0
        //---------------------------------------------------------------------------------------------

        /// <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);
            }
        }
예제 #2
0
 /// <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);
     }
 }
예제 #3
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);
     }
 }
예제 #4
0
 /// <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;
     }
 }
예제 #5
0
        /// <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;
            }
        }
예제 #6
0
        /// <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;
            }
        }
예제 #7
0
        //---------------------------------------------------------------------------------------------

        /// <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];
            }
        }
예제 #8
0
 public BasicVec3(SN.Vector3 v)
 {
     x = v.X;
     y = v.Y;
     z = v.Z;
 }
예제 #9
0
 public BasicVec2(SN.Vector2 v)
 {
     x = v.X;
     y = v.Y;
 }
예제 #10
0
 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);
     }
 }