以极坐标形式表示的复数之和

Sum of complex numbers expressed in polar form

我需要对两个复数 (c1,c2) 求和,然后用极坐标形式表示结果。

我真的不知道如何访问 c1+c2 的结果,我的意思是我将它们存储在变量“result”中,但是当我尝试访问它们时,我发现自己在 ComplexPolar 结构中,所以我可以't 访问 result.real 和 result.img 来计算大小和角度:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

struct ComplexCartesian
{
    float real;
    float img;
};

struct ComplexPolar
{
    float magnitude;
    float angle;
};

struct ComplexPolar add_two_complex(struct ComplexCartesian c1, struct ComplexCartesian c2, struct ComplexPolar result)
{
    result.real= c1.real+c2.real;
    result.img=c1.img+c2.img;

    result.magnitude= sqrt((result.real)^2 + (result.img)^2);
    result.angle= atan2(result.img, result.real);
}

^2 不是您在 C 中平方的方式,您必须将数字乘以自身或使用 libc pow 函数。

^2 是一个 XOR 操作,您的目标是切换第二位,但在您的情况下,您在浮点数上使用它,这违反了严格的别名规则并导致 undefined behavior (在顶部不是你想要的)。

查看下面的代码并附上一些注释:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

struct ComplexCartesian
{
    float real;
    float img;
};

struct ComplexPolar
{
    float magnitude;
    float angle;
};

struct ComplexPolar polar_from_cartesian_sum(struct ComplexCartesian c1, struct ComplexCartesian c2)
{
    struct ComplexPolar complexPolar; // here you declare the variable of your ComplexPolar struct

    c1.real += c2.real; // you don't need to have a result var, you can just reuse c1.
    c1.img += c2.img;
    complexPolar.magnitude = sqrt(c1.real * c1.real + c1.img * c1.img);
    complexPolar.angle = atan2(c1.img, c1.real);

    return complexPolar; // you return the value;
}


int main(void) {
    struct ComplexCartesian c1 = {0.12f, 0.15f};
    struct ComplexCartesian c2 = {0.42f, 1.15f};
    struct ComplexPolar complexPolar = polar_from_cartesian_sum(c1, c2);

    printf("%f %f\n", complexPolar.magnitude, complexPolar.angle);

    return 0;
}

gcc complex.c -lm && ./a.out

编译

输出:

1.407693 1.177098

注意:也许您应该明确说明您的角度以弧度表示,并将您的函数重命名为 polar_from_cartesian_sum

Radius = 1.41
θ = 67.44o = 1.18 radians