首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的距离总是小于5?

为什么我的距离总是小于5?
EN

Stack Overflow用户
提问于 2018-10-14 00:33:03
回答 1查看 47关注 0票数 0

为什么当我运行我的代码时,它总是给出小于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()的正文中包含注释逻辑的一行注释。

一如既往,避免混合制表符和空格。

代码语言:javascript
复制
#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;

}
EN

回答 1

Stack Overflow用户

发布于 2018-10-14 00:56:25

您应该将double tmax=360.0;替换为double tmax = (2.0*3.141592653589793238462643383279);,因为cossin在弧度中工作。

那么您要遵循规范,函数实际上应该是

代码语言:javascript
复制
void polarToRect(double radius, double theta, double*x, double*y){
    *x += radius*cos(theta);
    *y += radius*sin(theta);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52798515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档