📜  使用复数的几何<std::complex>在C++中|套装1(1)

📅  最后修改于: 2023-12-03 15:06:55.862000             🧑  作者: Mango

使用复数的几何std::complex 在 C++ 中

介绍

复数在几何中有着重要的作用。在 C++ 中,使用 <complex> 头文件提供的 std::complex 类可以非常方便地进行复数计算。本文将介绍如何使用 std::complex 类进行基本的复数计算和几何运算。

基本操作
定义和赋值

std::complex 类的定义如下:

template< class T > class complex;

其中,T 表示复数中实部和虚部的数据类型,可以使用 int、double、float 等等。

std::complex 类可以进行赋值操作。例如:

std::complex<double> c1(2.0, 3.0);           // 定义一个复数
std::complex<float> c2(c1);                  // 使用另一个复数进行赋值
std::complex<int> c3;                        // 默认初始化为 0
c3 = 4 + 5i;                                 // 直接使用实部和虚部进行赋值
实部、虚部和共轭复数

std::complex 类提供了实部、虚部和共轭复数的方法。例如:

std::complex<double> c(2.0, 3.0);
double re = c.real();       // 获取实部,结果为 2.0
double im = c.imag();       // 获取虚部,结果为 3.0
std::complex<double> c_conj = std::conj(c);   // 求取共轭复数
四则运算

std::complex 类可以进行加、减、乘、除运算。例如:

std::complex<double> c1(2.0, 3.0);
std::complex<double> c2(4.0, -5.0);
std::complex<double> c_add = c1 + c2;    // 复数加法
std::complex<double> c_sub = c1 - c2;    // 复数减法
std::complex<double> c_mul = c1 * c2;    // 复数乘法
std::complex<double> c_div = c1 / c2;    // 复数除法
模长和幅角

std::complex 类提供了求取复数模长和幅角的方法。例如:

std::complex<double> c(3.0, 4.0);
double r = std::abs(c);                 // 求取模长,结果为 5.0
double theta = std::arg(c);             // 求取幅角,结果为 0.93
极坐标和直角坐标表示互相转换

std::complex 类提供了将复数从极坐标表示转换为直角坐标表示的方法,以及将复数从直角坐标表示转换为极坐标表示的方法。例如:

std::complex<double> c_rect(3.0, 4.0);
double r = std::abs(c_rect);
double theta = std::arg(c_rect);
std::complex<double> c_polar = std::polar(r, theta);    // 极坐标转直角坐标

std::complex<double> c_polar(5.0, 0.4);
double r = std::abs(c_polar);
double theta = std::arg(c_polar);
std::complex<double> c_rect = std::rect(r, theta);      // 直角坐标转极坐标
几何运算

在几何中,复数可以表示向量。接下来介绍如何使用 std::complex 类进行向量计算。

模长

向量的模长就是向量的长度。可以使用 std::abs() 求取。例如:

std::complex<double> v(3.0, 4.0);
double len = std::abs(v);       // 求取向量模长
单位向量

单位向量是向量的模长为 1 的向量。可以通过将向量除以模长得到单位向量。例如:

std::complex<double> v(3.0, 4.0);
std::complex<double> unit_v = v / std::abs(v);  // 求取单位向量
向量加法

向量加法就是将两个向量相加。可以直接使用 std::complex 类的加法运算符。例如:

std::complex<double> v1(3.0, 4.0);
std::complex<double> v2(1.0, -2.0);
std::complex<double> v_sum = v1 + v2;   // 求取向量和
向量减法

向量减法就是将一个向量减去另一个向量。可以直接使用 std::complex 类的减法运算符。例如:

std::complex<double> v1(3.0, 4.0);
std::complex<double> v2(1.0, -2.0);
std::complex<double> v_diff = v1 - v2;  // 求取向量差
数乘

数乘就是将向量乘以一个标量。可以直接使用 std::complex 类的乘法运算符。例如:

std::complex<double> v(3.0, 4.0);
std::complex<double> v_scaled = 2.0 * v;  // 向量数乘
内积

内积就是将两个向量相乘并相加。可以使用 std::real() 和 std::imag() 方法获取向量的实部和虚部,并进行内积操作。例如:

std::complex<double> v1(3.0, 4.0);
std::complex<double> v2(1.0, -2.0);
double dot_product = std::real(std::conj(v1) * v2);   // 求取内积
夹角

可以使用 std::acos() 求取向量的夹角。例如:

std::complex<double> v1(3.0, 4.0);
std::complex<double> v2(1.0, -2.0);
double angle = std::acos(std::real(std::conj(v1) * v2) / (std::abs(v1) * std::abs(v2)));    // 求取夹角
总结

通过使用 std::complex 类,我们可以在 C++ 中非常方便地进行复数计算和几何运算。上述内容只是入门级别,还可以进一步深入学习 std::complex 类的其他功能和更为高级的几何运算。