为什么输出为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;
}
答案 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}}用于可变数字参数。