C++ 将相位(角度)转换为复数值

C++ 将相位(角度)转换为复数值,c++,eigen,C++,Eigen,是否有一个标准函数可以执行val=cos(相位)+sin(相位)j。应用“欧拉公式”来做与“”函数相反的事情,是否有一个常规名称?类似于,但这需要幅值分量 我正在研究一个大型代码库,它大量使用以下模式: Eigen::VectorXf相位=。。。; 本征::向量xcf cplx=。。。; cplx.real()=phase.array().cos(); cplx.imag()=phase.array().sin(); 不幸的是,这没有利用sincos优化 有没有一种我在文档中找不到的自然方法可

是否有一个标准函数可以执行
val=cos(相位)+sin(相位)j
。应用“欧拉公式”来做与“”函数相反的事情,是否有一个常规名称?类似于,但这需要幅值分量

我正在研究一个大型代码库,它大量使用以下模式:

Eigen::VectorXf相位=。。。;
本征::向量xcf cplx=。。。;
cplx.real()=phase.array().cos();
cplx.imag()=phase.array().sin();
不幸的是,这没有利用
sincos
优化

有没有一种我在文档中找不到的自然方法可以做到这一点?这有一个传统的名字吗

这可能就是我要做的,在我修改很多代码之前,先向世界确认一下

void phase2Cplx(常数本征::Ref phaseIn,
本征::Ref cplxOut){
//断言len in==len out
特征::索引len=cplxOut.size();
std::complex*out=cplxOut.data();
常量float*in=phaseIn.data();
对于(本征::指数i=0;i
您可能需要搜索一些库例程。
半径、相位
表示被称为极坐标形式(因此,可能是
std::polar()
的名称)
real、imag
形式被称为矩形形式或直角坐标形式。因此,<>代码>矩形()/<代码>或<代码>矩形()/<代码>或类似的可能是您考虑的候选名称。传统上,这将有两个参数(相位和半径),但是,至少在C++中,可以指定RADIUS作为默认值,即“代码> 1”/代码>或<代码> 1 > /代码> .>代码> STD::极性< /代码>,并且只是一个普通的<代码> STD::Sin < /C> >后面是 STD::COS似乎在GCC中被优化为<代码> SnCOSF < /C>。但是,只有在与
-ffast math
相结合的情况下,将实部和虚部存储为单独的向量可能会更好。理想情况下,正弦和余弦计算可以矢量化,共享许多公共代码。到目前为止,这对于Eigen是不可能的,cf:@Peter我很高兴调用我的函数
phaseToRectangle
。谢谢你的主意。