#include "stdio.h"
#include "math.h"
typedef struct plural
{
double shi;
double xv;
};
//复数加法
plural complexAdd(plural a, plural b)
{
plural result;
result.shi = a.shi + b.shi;
result.xv = a.xv + b.xv;
return result;
}
//复数减法
plural complexSubtract(plural minuend, plural subtrahend)
{
plural result;
result.shi = minuend.shi - subtrahend.shi;
result.xv = minuend.xv - subtrahend.xv;
return result;
}
//复数乘法
plural complexMultiply(plural a, plural b)
{
plural result;
result.shi = a.shi * b.shi - a.xv * b.xv;
result.xv = a.xv * b.shi + a.shi * b.xv;
return result;
}
//复数除法
plural complexDivision(plural dividend, plural divisor)
{
plural result;
result.shi = (dividend.shi * divisor.shi + dividend.xv * divisor.xv) /(divisor.shi * divisor.shi + divisor.xv * divisor.xv);
result.xv = (dividend.xv * divisor.shi - dividend.shi * divisor.xv) /(divisor.shi * divisor.shi + divisor.xv * divisor.xv);
return result;
}
//复数求模
double complexAbs(plural a)
{
return (sqrt( pow(a.shi,2) + pow(a.xv,2) ));
}
//复数取相角 返回 弧度rad
double complexAngle(plural a)
{
/*是atan2而非atan,(-PI,PI] */
return (atan2( a.xv,a.shi));
}
//复指数运算
plural complexExp(plural a)
{
plural result;
result.shi = exp(a.shi) * cos(a.xv);
result.xv = exp(a.shi) * sin(a.xv);
return result;
}
//通过模和相角合成复数 1模 2弧度rad
plural complexByAbsAngle(double r, double theta)
{
plural tmp_1,tmp_2;
tmp_1.shi = 0;
tmp_1.xv = theta;
tmp_2 = complexExp(tmp_1);
tmp_2.shi *= r;
tmp_2.xv *= r;
return tmp_2;
}
int main()
{
plural data1,data2,r;
double t=0;
data1.shi=0.356;
data1.xv=0;
data2.shi=7.5;
data2.xv=4;
r=complexByAbsAngle(2.23607,1.10715);
printf("%f\n",r.shi);
printf("%f\n",r.xv);
return 0;
}