110,530
社区成员
发帖
与我相关
我的任务
分享
public class Complex
{
private double realPart, imaginaryPart;
public double RealPart
{ get { return realPart; } set { } }
public double ImaginaryPart
{ get { return imaginaryPart; } set { } }
public Complex(double realPart, double imaginaryPart)
//构造复数函数
{
this.realPart = realPart; this.imaginaryPart = imaginaryPart;
}
//复数取模值//
public static Double Modulus(Complex z)
{
double modular = new double();
modular=Math.Sqrt(z.realPart*z.realPart+z.imaginaryPart*z.imaginaryPart);
return modular;
}
public static Complex Conjugate(Complex z)
//复数的共轭
{
return new Complex(z.realPart, -z.imaginaryPart);
}
//复数的加减乘除//
private static Complex Add( Complex z1, Complex z2)
{
return new Complex(z1.realPart+z2.realPart,z1.imaginaryPart+z2.imaginaryPart);
}
private static Complex Subtract(Complex z1, Complex z2)
{
return new Complex(z1.realPart-z2.realPart,z1.imaginaryPart-z2.imaginaryPart);
}
private static Complex Multiply(Complex z1, Complex z2)
{
Complex z=new Complex (0,0);
z.realPart=z1.realPart*z2.realPart-z1.imaginaryPart*z2.imaginaryPart;
z.imaginaryPart=z1.imaginaryPart*z2.realPart+z1.realPart*z2.imaginaryPart;
return z;
}
private static Complex Divide(Complex z1, Complex z2)
{
Complex z=new Complex (0,0);
z.realPart=(z1.realPart*z2.realPart+z1.imaginaryPart*z2.imaginaryPart)/Modulus(z2);
z.imaginaryPart=z1.imaginaryPart*z2.realPart-z1.realPart*z2.imaginaryPart/Modulus(z2);
return z;
}
//加减乘除的重载//
public static Complex operator +(Complex z1,Complex z2)
{
return Add(z1,z2);
}
public static Complex operator -(Complex z1, Complex z2)
{
return Subtract(z1, z2);
}
public static Complex operator *(Complex z1, Complex z2)
{
return Multiply(z1, z2);
}
public static Complex operator /(Complex z1, Complex z2)
{
return Divide(z1, z2);
}
//将复数转化成弧度表示形式//
public double angle(Complex z1)
{
if (z1.realPart == 0)
{
if (z1.imaginaryPart > 0) return 90.0;
else if (z1.imaginaryPart == 0) return 0.0;
else return -90.0;
}
else if (z1.realPart < 0)
{
if (z1.imaginaryPart == 0) return 180d;
else if (z1.imaginaryPart > 0) return Math.Atan(z1.imaginaryPart / z1.realPart) * 180d / Math.PI + 180d;
else return Math.Atan(z1.imaginaryPart / z1.realPart) * 180d / Math.PI - 180d;
}
else return Math.Atan(z1.imaginaryPart / z1.realPart) * 180 / Math.PI;
}
}