Advertisement
nm9505

MS-ComplexClass-cs

May 21st, 2024
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.34 KB | Science | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4.  
  5. namespace MandelBrootSet
  6. {
  7.     public struct Complex: IEquatable<Complex>, IFormattable
  8.     {        
  9.         //Definición de variables de entorno global.
  10.         bool gotMagnitude, gotMagnitudeSquared;
  11.         double magnitude, magnitudeSquared;
  12.         public Complex(double real, double imaginary) : this()
  13.         {
  14.             Real = real;
  15.             Imaginary = imaginary;
  16.         }
  17.         public double Real { private set; get; }
  18.         public double Imaginary { private set; get; }
  19.         //Cálculo del módulo y su cuadrado.
  20.         public double MagnitudeSquared
  21.         {
  22.             get
  23.             {
  24.                 if (gotMagnitudeSquared)
  25.                 {
  26.                     return magnitudeSquared;
  27.                 }
  28.                 magnitudeSquared = Real * Real + Imaginary * Imaginary;
  29.                 gotMagnitudeSquared = true;
  30.                 return magnitudeSquared;
  31.             }
  32.         }
  33.         public double Magnitude
  34.         {
  35.             get
  36.             {
  37.                  if (gotMagnitude)
  38.                  {
  39.                  return magnitude;
  40.                  }
  41.                  magnitude = Math.Sqrt(magnitudeSquared);
  42.                  gotMagnitude = true;
  43.                  return magnitude;
  44.             }
  45.         }
  46.         //Sección de Operadores y funciones auxiliares
  47.         public static Complex operator +(Complex left, Complex right)
  48.          {
  49.             return new Complex(left.Real + right.Real, left.Imaginary + right.Imaginary);
  50.          }
  51.          public static Complex operator -(Complex left, Complex right)
  52.          {
  53.             return new Complex(left.Real - right.Real, left.Imaginary - right.Imaginary);
  54.          }
  55.          public static Complex operator *(Complex left, Complex right)
  56.          {
  57.             return new Complex(left.Real * right.Real - left.Imaginary * right.Imaginary,
  58.             left.Real * right.Imaginary + left.Imaginary * right.Real);
  59.          }
  60.          public static bool operator ==(Complex left, Complex right)
  61.          {
  62.             return left.Real == right.Real && left.Imaginary == right.Imaginary;
  63.          }
  64.          public static bool operator !=(Complex left, Complex right)
  65.          {
  66.             return !(left == right);
  67.          }
  68.          public static implicit operator Complex(double value)
  69.          {
  70.             return new Complex(value, 0);
  71.          }
  72.          public static implicit operator Complex(int value)
  73.          {
  74.             return new Complex(value, 0);
  75.          }
  76.          public override int GetHashCode()
  77.          {
  78.             return Real.GetHashCode() + Imaginary.GetHashCode();
  79.          }
  80.          public override bool Equals(Object value)
  81.          {
  82.             return Real.Equals(((Complex)value).Real) && Imaginary.Equals(((Complex)value).Imaginary);
  83.          }
  84.          public bool Equals(Complex value)
  85.          {
  86.             return Real.Equals(value) && Imaginary.Equals(value);
  87.          }
  88.          public override string ToString()
  89.          {
  90.             return String.Format("{0} {1} {2}i", Real, RealImaginaryConnector(Imaginary), Math.Abs(Imaginary));
  91.          }
  92.          public string ToString(string format)
  93.          {
  94.             return String.Format("{0} {1} {2}i", Real.ToString(format), RealImaginaryConnector(Imaginary), Math.Abs(Imaginary).ToString(format));
  95.          }
  96.          public string ToString(IFormatProvider formatProvider)
  97.          {
  98.             return String.Format("{0} {1} {2}i", Real.ToString(formatProvider), RealImaginaryConnector(Imaginary), Math.Abs(Imaginary).ToString(formatProvider));
  99.          }
  100.          public string ToString(string format, IFormatProvider formatProvider)
  101.          {
  102.             return String.Format("{0} {1} {2}i", Real.ToString(format, formatProvider), RealImaginaryConnector(Imaginary), Math.Abs(Imaginary).ToString(format, formatProvider));
  103.          }
  104.          string RealImaginaryConnector(double value)
  105.          {
  106.             return Math.Sign(value) > 0 ? "+" : "\u2013";
  107.          }
  108.          
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement