Guest User

Untitled

a guest
Jun 19th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.84 KB | None | 0 0
  1.     class Complex
  2.     {
  3.         private double a;
  4.         private double b;
  5.         public static Complex i = new Complex(0, 1);
  6.         public Complex(double a, double b)
  7.         {
  8.             this.a = a;
  9.             this.b = b;
  10.         }
  11.         public static Complex operator +(Complex z1, Complex z2)
  12.         {
  13.             return new Complex(z1.a + z2.a, z1.b + z2.b);
  14.         }
  15.         public static Complex operator -(Complex z1, Complex z2)
  16.         {
  17.             return new Complex(z1.a - z2.a, z1.b - z2.b);
  18.         }
  19.         public static Complex operator *(Complex z1, Complex z2)
  20.         {
  21.             double arg1 = z1.Arg(), arg2 = z2.Arg();
  22.             double r1 = z1.Abs(), r2 = z2.Abs();
  23.             double a = r1 * r2 * Math.Cos(radian(arg1 + arg2));
  24.             double b = r1 * r2 * Math.Sin(radian(arg1 + arg2));
  25.             return new Complex(a, b);
  26.         }
  27.         public static Complex operator /(Complex z1, Complex z2)
  28.         {
  29.             double r1 = z1.Abs(), r2 = z2.Abs();
  30.             double arg1 = z1.Arg(), arg2 = z2.Arg();
  31.             double a = r1 / r2 * Math.Cos(radian(arg1 - arg2));
  32.             double b = r1 / r2 * Math.Sin(radian(arg1 - arg2));
  33.             return new Complex(a, b);
  34.         }
  35.         public static Complex Pow(Complex z, uint n)
  36.         {
  37.             double arg = z.Arg(), r = z.Abs();
  38.             double a = Math.Pow(r, n) * Math.Cos(radian(n * arg));
  39.             double b = Math.Pow(r, n) * Math.Sin(radian(n * arg));
  40.             return new Complex(a, b);
  41.         }
  42.         public static Complex[] Root(Complex z, uint n)
  43.         {
  44.             Complex[] roots = new Complex[n];
  45.             double a, b, r = z.Abs(), arg = z.Arg();
  46.             for (int k = 0; k <= n - 1; k++)
  47.             {
  48.                 a = Math.Pow(r, 1.0 / n) * Math.Cos(radian((arg + 360 * k) / n));
  49.                 b = Math.Pow(r, 1.0 / n) * Math.Sin(radian((arg + 360 * k) / n));
  50.                 roots[k] = new Complex(a, b);
  51.             }
  52.             return roots;
  53.         }
  54.         public static implicit operator Complex(double d)
  55.         {
  56.             return new Complex(d, 0);
  57.         }
  58.         public static Complex Cis(double degrees)
  59.         {
  60.             double angle_r = radian(degrees);
  61.             return new Complex(Math.Cos(angle_r), Math.Sin(angle_r));
  62.         }
  63.         public override string ToString()
  64.         {
  65.             string realPart = ((a != 0) ? a + "" : null);
  66.             string imaginaryPart_i = ((a != 0 && b > 0) ? "+" : null) + b + "i";
  67.             if (b == 1) imaginaryPart_i = ((a != 0) ? "+" : null) + "i";
  68.             else if (b == -1) imaginaryPart_i = "-i";
  69.             else if (b == 0) imaginaryPart_i = "";
  70.             if (a == 0 && b == 0)
  71.                 return "0";
  72.             return realPart + imaginaryPart_i;
  73.         }
  74.         public string Polar()
  75.         {
  76.             double arg = Arg();
  77.             return Abs() + "(cos(" + arg + ")+i*sin(" + arg + "))";
  78.         }
  79.         public Complex Conjugate()
  80.         {
  81.             return new Complex(a, -b);
  82.         }
  83.         public double Abs()
  84.         {
  85.             return Math.Sqrt(a * a + b * b);
  86.         }
  87.         public double Arg()
  88.         {
  89.             double arg = Math.Atan(b / a) * 180 / Math.PI;
  90.             if (a < 0 && b >= 0)
  91.                 arg += 180;
  92.             else if (a < 0 && b < 0)
  93.                 arg -= 180;
  94.             else if (a == 0 && b > 0)
  95.                 arg = 90;
  96.             else if (a == 0 && b < 0)
  97.                 arg = -90;
  98.             return arg;
  99.         }
  100.         public static double Re(Complex z)
  101.         {
  102.             return z.a;
  103.         }
  104.         public static double Im(Complex z)
  105.         {
  106.             return z.b;
  107.         }
  108.         private static double radian(double degrees)
  109.         {
  110.             return degrees * Math.PI / 180;
  111.         }
  112.     }
Add Comment
Please, Sign In to add comment