gpt4 book ai didi

c - 为什么速度返回零?在C中

转载 作者:行者123 更新时间:2023-11-30 20:55:24 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <math.h>

#define TRUE 1
#define FALSE 0
#define GRAVITY 9.8

double mag(double x, double y, double z);
double metersFallen(double fallTime);
double velocity (double v, double t1, double t2, double magAcc);
double position (double x, double v, double t1, double t2);

int main()
{
printf("Ok, I'm now receiving data.\n");

int running = TRUE;
double secFall = 0;;
double distance = 0;
int counter = 0;
int programStartTime = 0;
double currentTime = 0;
int time = 0;
int start = 0, end = 0;
double x, y, z, v, p;
double seconds;

scanf("%d,%lf,%lf,%lf", &time, &x, &y, &z);
printf("I'm Waiting");
programStartTime = time;
seconds = time;

while(running){

scanf("%d,%lf,%lf,%lf", &time, &x, &y, &z);

if((time - programStartTime) >= 1000){

printf(".");
programStartTime = time;

}

if(mag(x, y, z) < .75 ){

start = time;
printf("Help me! I'm falling");

while(end == 0){

if((time - programStartTime) >= 1000){

printf("!");
programStartTime = time;
}

scanf("%d,%lf,%lf,%lf", &time, &x, &y, &z);

v = velocity(v, time, seconds, mag(x,y,z));
p = position(x, v, time, seconds);
seconds = time;

if(mag(x, y, z) > .95 ){

end = time;
running = FALSE;
}
fflush(stdout);
}
}
fflush(stdout);
}
secFall = ((end - start)/1000.0);
distance = metersFallen(secFall);
//percent = ;

printf("\nTime falling was %6.3lf seconds\n", secFall);
printf("Distance fallen was %6.3lf meters\n", distance);
printf("Compensating for air resistance, the fall was %lf meters.\n", p);
//printf("This is %lf less than computed before\n", percent);
printf("%lf\n", mag(x,y,z));

return 0;

}

double metersFallen(double fallTime)
{

return(.5*GRAVITY*fallTime*fallTime);

}
double mag(double x, double y, double z)
{

return sqrt(x*x+y*y+z*z);

}
double velocity (double v, double t1, double t2, double magAcc)
{
int numVelocity = v + GRAVITY*(1-magAcc)*(t1 - t2)/1000;
return numVelocity;
}
double position (double x, double v, double t1, double t2)
{
double p = x + v*(t1 - t2)/1000;
return p;
}

使用此示例数据运行 http://www.filedropper.com/lab6sampledata20131

我需要位置函数才能工作,但速度返回零时我不能。我们正在使用带有加速计的设备来运行它。仅供引用,我是一名刚接触编程的学生,请耐心等待。

最佳答案

您的速度函数几乎肯定会返回 0,因为您已将 numVelocity 定义为 int

在 C 中,当对整数进行计算时,答案将始终向下舍入到最接近的整数,并且由于时间步长约为 5,因此第二项将接近 0。将其添加到某个值接近 0 时将向下舍入为 0。

据我所知,您还没有初始化v,并且您正在将v(未初始化)传递到速度函数中来计算v code> 这会给你未定义的结果(很可能是 0...)。

此外,在进行 double 计算时,您应该编写小数点为 0 的常量,即1000.0。程序将其解释为 double ,而不是 int 的 1000

同样,时间是一个整数变量,并且您要求它在函数中是一个 double 变量。您可以通过传递 (double)time 而不是 time 来强制执行此操作。

尝试在代码中更改这些内容(通过将 v 设置为初始速度来初始化 v)并查看发生了什么变化:)

关于c - 为什么速度返回零?在C中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33131763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com