我寫了一個程序,將模擬從50米大樓拋出的球。 我加入碰撞檢測時,通過顛倒y方向的速度,當球擊中地面時(y < 0),保持水平速度相同,並將兩個速度乘以某個最小值,這樣球就會最終到達休息。執行碰撞檢測
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main() {
FILE *fp;
FILE *fr;
float ax = 0, ay = 0, x = 0, y = 0, vx = 0, vy = 0;
float time = 0, deltaTime = .001;
float min = -.00000000001;
int numBounces = 0;
fr = fopen("input_data.txt", "rt");
fp = fopen("output_data.txt", "w");
if(fr == NULL){ printf("File not found");}
if(fp == NULL){ printf("File not found");}
fscanf(fr, "ax: %f ay: %f x: %f y: %f vx: %f vy: %f\n", &ax, &ay, &x, &y, &vx, &vy);
while (vx > min && vy > min) {
time = time + deltaTime;
vx = vx + ax*deltaTime;
vy = vy + ay*deltaTime;
x = x + vx*deltaTime + (.5*ax*deltaTime*deltaTime);
y = y + vy*deltaTime + (.5*ay*deltaTime*deltaTime);
fprintf(fp, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t\n", ax, ay, x, y, vx, vy, time);
//Collision occurs; implement collision response
if(y < 0) {
vx = vx + ax*deltaTime*(.00001);
vy = -(vy + ay*deltaTime*(.00001));
numBounces++;
fprintf(fp, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t\n", ax, ay, x, y, vx, vy, time);
}
}
fclose(fp);
fclose(fr);
system ("PAUSE");
return 0;
}
我沒有得到正確的值來產生正確的數據圖。 這可能是因爲我在while循環中的條件需要改變,或者我沒有正確實現碰撞響應。
這裏也是一些示例數據:
斧:0 AY:-9.8 X:0 Y:50 VX:8.66 VY:5
多麼錯誤是你的代碼生成輸出數據? – Ali1S232 2011-05-29 21:33:30
我的數據情節由什麼組成 – kachilous 2011-05-29 21:35:30
你什麼意思什麼都沒有?你可以發表一個例子嗎? – flow 2011-05-30 20:32:11