如何在C程序中用atan()函数求角度?
我写了一个程序来寻找极坐标,如果笛卡尔坐标是给定的。但我不能得到正确的角度,请帮助如何在C程序中用atan()函数求角度?,c,C,我写了一个程序来寻找极坐标,如果笛卡尔坐标是给定的。但我不能得到正确的角度,请帮助 #include<math.h> #include<stdio.h> int main() { int x,y,z,r,ang; float k; printf("enter the cartesian co-ordinates:"); scanf("%d%d",&x,&y); z=x*x+y*y; r=sqrt(z); k=y/x; a
#include<math.h>
#include<stdio.h>
int main()
{
int x,y,z,r,ang;
float k;
printf("enter the cartesian co-ordinates:");
scanf("%d%d",&x,&y);
z=x*x+y*y;
r=sqrt(z);
k=y/x;
ang=atan(k);
printf("polar co-ordinates r=%d,ang=%f",r,ang);
return 0;
}
您应该使用双精度数字,而不是int。阅读的文档,-它与弧度一起工作。并以\n或else调用结束每个printf;此外,更好地测试测试的结果。初始化变量是一个好习惯,因为以后代码会变得更复杂,并且不需要未初始化的值
#include<math.h>
#include<stdio.h>
int main() {
double x=0.0,y=0.0,r=0.0,ang=0.0;
printf("enter the cartesian co-ordinates:\n");
if (scanf("%f %f",&x,&y)<2)
{ fprintf(stderr,"bad input\n"); exit(EXIT_FAILURE);} ;
r=sqrt(x*x + y*y);
ang=atan2(y, x);
printf("polar co-ordinates r=%f, ang=%f\n",r,ang);
return 0;
}
如果使用
如前所述,在特定情况下,0.0的初始化赋值是无用的。但您可能会改进和扩展代码库,因此以后它们可能会很有用。这是一个习惯问题,我通常总是初始化变量,编译器会对其进行优化,如果不需要,则将其删除。它们使代码更具确定性,如果你在调试器中一步一步地运行你的程序,例如gdb,你会更好地理解它
当使用gcc-Wall进行编译时,对于大多数未初始化的变量,您会得到一个警告
另外,您可以避免使用r和ang,直接在printf中使用sqrtx*x+y*y和atan2y,x表达式
注意,atan2比atan好,因为如果x为0.0,则不会被零除。最后我找到了程序的解决方案。谢谢你的建议
#include<math.h>
#include<stdio.h>
#define PI 3.14159265
int main()
{
float x,y,z,r;
double ang,val;
printf("enter the cartesian co-ordinates:\n");
scanf("%f%f",&x,&y);
z=x*x+y*y;
r=sqrt(z);
val=180.0/PI;
ang=atan2(y,x)*val;
printf("polar co-ordinates r=%f,ang=%1f",r,ang);
return 0;
}
最好包括一些细节,比如您使用了哪些输入、您期望的输出以及实际发生的情况。。k=y/r;ang需要修改x的值。我不明白为什么这个问题被降级了?所有这些初始化都有点毫无意义;第一次使用变量时,它们是通过scanf设置x和y,通过赋值设置r和ang,因此不可能在未初始化的情况下滥用它们,因为您检查了scanf的返回值。有人甚至可能会争辩说,在完成赋值之前不应该定义r和ang:double r=sqrtx*x+y*y;双ang=atan2y,x;。对于接近2k+1的角度,atan2也更精确。atan2与atan的主要原因是,atan2提供了机器-pi到pi范围,而atan提供了-pi/2到pi/2范围的一半。如果x,y->0,0,这两种方法都有问题。虽然不完全好,但几乎。您应该使用中已经定义的M_PI,无需定义您的PIhypot比sqrtx*x+y*y具有优势,因为它的范围限制较少。
#include<math.h>
#include<stdio.h>
#define PI 3.14159265
int main()
{
float x,y,z,r;
double ang,val;
printf("enter the cartesian co-ordinates:\n");
scanf("%f%f",&x,&y);
z=x*x+y*y;
r=sqrt(z);
val=180.0/PI;
ang=atan2(y,x)*val;
printf("polar co-ordinates r=%f,ang=%1f",r,ang);
return 0;
}