【问题标题】:How come for my distance i always get less than 5?为什么我的距离总是小于 5?
【发布时间】:2019-03-18 19:20:34
【问题描述】:

为什么当我运行我的代码时它总是给我小于 6 的距离

通过设置 X Y 坐标来初始化程序 Flavia 到 (0,0) 以及从中心到零的当前距离。 初始化随机数生成器。

向用户询问最大值 移动次数。

然后主循环迭代直到最大移动数 达到或距中心的距离超过了腹板半径。

每个 循环的迭代选择一个最大为 5.0 cm 的随机距离和一个 0 到 360 度的随机方向。根据这些随机值,计算 X 的变化和 Y 的变化。将这些添加到 当前 X 和 Y 位置。

循环结束后,判断是否 Flavia 逃跑了,或者被吃掉了。

请注意,如上所述,每一步都会放置 Flavia 在以她的旧位置为中心的圆圈中的新位置。 这与直接选择 X 和 a 中的随机变化不同 Y 的随机变化。

您将需要: /* 返回随机双精度 [0.0, 1.0) /双 randDouble(); / 将输入极坐标转换为输出直角坐标 */ void polarToRect( double radius, double θ, 双 *x, 双 *y );

使用 randDouble() 从 C-拼图。编写您自己的 polarToRect()。

这是必需的,因为部分 目的是练习使用带有函数的指针。

计算 使用勾股定理与网络中心的距离。

您不需要为此编写函数。

初始化随机数 带有 srand() 和当前时间的生成器。

启动你的源文件 带有一个给出作者和日期并描述的 cmets 块 简要说明程序的作用。

对于每个功能,简要描述 它能做什么。 在 main() 的主体中包含一些一行 cmets 注释逻辑。

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

#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;

}

【问题讨论】:

  • 我的意思是少于 5 个。

标签: c


【解决方案1】:

您应该将double tmax=360.0; 替换为double tmax = (2.0*3.141592653589793238462643383279);,因为cossin 以弧度为单位。

那么你要遵循规范的功能真的应该是

void polarToRect(double radius, double theta, double*x, double*y){
    *x += radius*cos(theta);
    *y += radius*sin(theta);
}

【讨论】:

  • 不要忘记点赞并接受答案,让其他人知道您的问题已解决。
猜你喜欢
  • 1970-01-01
  • 2015-07-14
  • 2015-12-31
  • 1970-01-01
  • 2012-02-24
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多