自定义ComplexNum复数类

复数对于旋转的表示非常重要

  • 它引入了旋转算子(rotational operator)的思想:可以通过复数表示一个旋转变换。
  • 它是四元数和多向量的内在属性。

两个复数的乘积

  • 两个复数的乘积就是各项分别相乘并相加z1z2=(a+bi)(c+di)=(ac−bd)+(ad+bc)i
  • 两个复数的加减和乘积都是一个复数。

共轭复数

  • 两个复数相乘还有个特殊情况:(a+bi)(a−bi)=a^2+b^2

两个复数的除法

  • 利用共轭复数的性质,z1/z2=(ac+bd)+(bc−ad)i / c^2+d^2

复数与旋转

  • 乘以 i^2看成是绕原点 180° 的旋转、乘以 i 表示90° 的旋转。旋转 45° 究竟是乘以 0.5i
  • 乘以一个复数,可以同时带来两种变换的效果。
    长度的缩放(通过改变模长)。旋转(通过改变幅角)。

旋转子

  • 乘以一个模为 1 的复数时,不会导致缩放,只会产生旋转。这样的复数就称为旋转子(rotor)
  • 旋转子的共轭复数等于顺时针旋转

自定义复数类

  • 直接拷贝使用
class ComplexNum
{
public:
    ComplexNum();
    ComplexNum(double a,double b);
public:
    //复数的四则运算
    ComplexNum operator +(const ComplexNum& num);
    ComplexNum operator -(const ComplexNum& num);
    ComplexNum operator *(const ComplexNum& num);
    ComplexNum operator /(const ComplexNum& num);

    //其他函数,设置和取模
    void setComplexNumValue(double a,double b);
    double getComplexNumMold();
    double A();
    double B();

private:
    double a,b;
};



ComplexNum::ComplexNum():a(0),b(0)
{

}

ComplexNum::ComplexNum(double a,double b){
    this->a=a;
    this->b=b;
}

//复数的四则运算
ComplexNum ComplexNum::operator +(const ComplexNum& num){
    return ComplexNum(this->a+num.a,this->b+num.b);
}

ComplexNum ComplexNum::operator -(const ComplexNum& num){
    return ComplexNum(this->a-num.a,this->b-num.b);
}

//复数的相乘(a+bi)(c+di)=(ac-bd)+(bc+ad)i两个复数的积仍然是一个复数
ComplexNum ComplexNum::operator *(const ComplexNum& num){
    return ComplexNum(this->a*num.a-this->b*num.b,this->b*num.a+this->a*num.b);
}

//复数的除法
ComplexNum ComplexNum::operator /(const ComplexNum& num){
    if (!num.a && !num.b){
        qDebug()<<"除数不能位0";
        return ComplexNum(a, b);
    }else{
        return ComplexNum((a*num.a + b*num.b) / (num.a*num.a + num.b*num.b),
                          (b*num.a - a*num.b) / (num.a*num.a + num.b*num.b));
    }
}

//其他函数,设置和取模
void ComplexNum::setComplexNumValue(double a,double b){
    this->a=a;
    this->b=b;
}

double ComplexNum::getComplexNumMold(){
    return sqrt(a*a+b*b);
}

double ComplexNum::A(){
    return this->a;
}
double ComplexNum::B(){
    return this->b;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值