为什么当我运行我的代码时,它总是给出小于6的距离
通过将Flavia的by坐标设置为(0,0)和从中心到零的当前距离来初始化程序。初始化随机数生成器。
询问用户的最大移动次数。
然后主循环迭代,直到达到最大移动或距离中心超过网络半径。
循环的每一次迭代都会选择一个最大5.0cm的随机距离和一个0到360度的随机方向。从这些随机值中,计算X中的变化和Y中的变化。将它们相加到当前的X和Y位置。
循环结束后,确定Flavia是逃脱了还是被吃掉了。
请注意,正如所描述的,每次移动都会使Flavia在一个以她原来的位置为中心的圆圈中处于一个新的位置。这与直接选择X中的随机变化和Y中的随机变化不同。
您需要: /*返回随机双[0.0,1.0) /双randDouble();/将输入极坐标转换为输出直角坐标*/ polarToRect(双半径,双θ,双*x,双*y );
使用C中的randDouble()。编写自己的polarToRect()。
这是必需的,因为它的部分目的是使用带有函数的指针。
利用毕达哥拉斯定理计算离网络中心的距离。
您不需要为此编写函数。
用srand()和当前时间初始化随机数生成器。
用注释块启动源文件,给出作者和日期,并简要描述程序的功能。
对于每个函数,请简要描述它所做的工作。在main()的正文中包含注释逻辑的一行注释。
一如既往,避免混合制表符和空格。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
void polarToRect(double radius, double theta, double*x, double*y){
*x = radius*cos(theta);
*y = radius*sin(theta);
}
/* returns random double cordinates */
double randRadius(double max){
return max* ((double)rand()/RAND_MAX);
}
double randTheta(double max){
return max*((double)rand()/RAND_MAX);
}
int main(){
double x = 0;
double y = 0;
double distance;
double WebRadius = 10;
double r1, t2;
srand(time(NULL));
double tmax=360.0;
double rmax=5.0;
printf("\nBug starts at (%lf, %lf)", x,y);
int moves;
printf("\nNumber of moves Flavia can make: ");
scanf("%d", &moves);
for(; moves>0; moves--){
r1 = randRadius(rmax);
t2 = randTheta(tmax);
polarToRect(r1, t2, &x, &y);
distance = sqrt((x*x) + (y*y));
printf("\nThe bug move to: (%.2lf,%.2lf), Distance = %.2lf", x,y,distance);
}
if(distance > WebRadius){
printf("\nOh no! Flavia escapes.");
}
else{
printf("\nYum! Spider ate Flavia.");
}
return 0;
}发布于 2018-10-14 00:56:25
您应该将double tmax=360.0;替换为double tmax = (2.0*3.141592653589793238462643383279);,因为cos和sin在弧度中工作。
那么您要遵循规范,函数实际上应该是
void polarToRect(double radius, double theta, double*x, double*y){
*x += radius*cos(theta);
*y += radius*sin(theta);
}https://stackoverflow.com/questions/52798515
复制相似问题