为什么我得到0的输出

时间:2016-03-04 01:19:01

标签: c

为什么输出为0?我认为我的角度转换可能有些不对劲,可能是我的等式,但摆弄它并移动一些东西总能给我相同的结果。

我的目标是编写一个C代码,用于计算任意两个给定向量u和v的角度θ。

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


int main()

{
    double ux, uy;
    double vx, vy;
    double inner_product(double vx, double vy, double ux, double uy);
    double v;
    double u;
    double i;
    double x;
    double k;
    double pi;
    double angle;
    double p;
    ux = 1.0;
    uy = 1.0;
    vx = 1.0;
    vy = 1.0;



    printf ("input value for ux\n", ux);
    scanf_s ("%f", &ux);

    printf ("input value for uy\n", uy);
    scanf_s ("%f", &uy);

    printf ("input value for vx\n", vx);
    scanf_s ("%f", &vx);

    printf("input value for vy\n", vy);
    scanf_s ("%f", &vy);

    u = ux * vx;
    v = uy * vy;
    i = u * v;
    x = u * u;
    k = v * v;
    pi = acos(-1.0);
    p = acos(i / (sqrt(x * k)));
    angle = ((p * 180) / pi); //converting from radians to degrees


    printf("%f", angle);

return;

}

3 个答案:

答案 0 :(得分:2)

数学错误如下:

void *  AllocateMemory(int mb) {
    unsigned char* buffer = (unsigned char*)malloc(mb);
    return buffer;
}

void ReleaseMemory(void* ptr) {
    free(ptr);
}

将其更改为:

p = acos(i / (sqrt(x * k)));

这只是点积除以两个长度。

答案 1 :(得分:1)

你的等式是错误的。 正确的是:

|U|=√[Ux^2+Uy^2]
|V|=√[Vx^2+Vy^2]
U*V=(Ux,Uy)(Vx,Vy)=Ux*Uy+Vx*Vy
cos=U*V/[|U|*|V|]

答案 2 :(得分:0)

%f,但%lf说明符必须用于通过double系列读取scanf()类型的数据。

请注意,%f应用于打印类型double来自printf()家庭的数据,因为float会自动转换为{{ 1}}用于可变数字参数。