//complex = real + imag * i 的指数形式为 complex = r * e ^ (mu * i) ,因此
complex ^ n = (r ^ n) * (e ^( mu * n * i))
//r = sqrt(real * real + imag * imag) ,cos(mu) = real / r, sin(mu) =
imag / r, (cos(mu)) ^ 2 + (sin(mu)) ^ 2 = 1
// mu = atan(imag / real)
class complex
{
double imag_; double real_;
double r()
{
return Math.Sqrt(Math.Pow(imag_, 2) + Math.Pow(real_, 2));
}
double mu()
{
return Math.Atan2(imag_, real_);
}
public complex()
{
this.imag_ = 0;
this.real_ = 0;
}
public complex(double real,double imag)
{
this.imag_ = imag;
this.real_ = real;
}
public double imag()
{
return imag_;
}
public double real()
{
return real_;
}
public complex Add(complex comp)
{
double x = real_ + comp.real();
double y = imag_ + comp.imag();
return new complex(x, y);
}
public complex Substract(complex comp)
{
double x = real_ - comp.real();
double y = imag_ - comp.imag();
return new complex(x, y);
}
public complex Multiply(complex comp)
{
double x = real_ * comp.real() - imag_ * comp.imag();
double y = real_ * comp.imag() + imag_ * comp.real();
real_ = x;
imag_ = y;
return this;
}
public complex Divide(complex comp)
{
double x = (real_ * comp.real() + imag_ * comp.imag()) /
(Math.Pow(comp.real(), 2) + Math.Pow(comp.imag(), 2));
double y = (imag_ * comp.real() - real_ * comp.imag()) /
(Math.Pow(comp.real(), 2) + Math.Pow(comp.imag(), 2));
评论0