本文目錄一覽:
- 1、怎麼用c語言編一個簡單彈球問題
- 2、請教C語言大神小球反彈問題。。。指出我的錯誤,並告知為何會出現如此結果。。
- 3、c語言一個球從80米高空落下,落地反覆彈起。每次彈起高度是上次的一半,求次8次落地所經過的總路程
- 4、C語言,一個球從100米高度自由落下,每次落地後反彈回原高度的一半,再落下。求它在第10次落地時
怎麼用c語言編一個簡單彈球問題
/*Ball.h:定義結構體和BALL相關的函數*/
#ifndef _BALL_VC_SUPER_ADMI_2009_12_13_INCLUDE_
#define _BALL_VC_SUPER_ADMI_2009_12_13_INCLUDE_
typedef struct tagPOINT3D //3D坐標系
{
float x;
float y;
float z;
}POINT3D;
typedef struct tagBALL //球
{
POINT3D cur_coor;
POINT3D speed;
float radius;
}BALL;
typedef struct tagBOX //球的長方體運動場所,中空
{
POINT3D angle_coor[8]; //坐標,從下往上,順時針
float length;
float width;
float height;
}BOX;
void init_box(BOX *mybox,POINT3D origi_coor,POINT3D LWH)
{
int i;
mybox-height=LWH.x;
mybox-width=LWH.y;
mybox-height=LWH.z;
for(i=0;i8;i++)mybox-angle_coor[i]=origi_coor;
mybox-angle_coor[1].x=origi_coor.x+LWH.x;
mybox-angle_coor[2].x=origi_coor.x+LWH.x;
mybox-angle_coor[2].y=origi_coor.y+LWH.y;
mybox-angle_coor[3].y=origi_coor.y+LWH.y;
for(i=4;i8;i++)mybox-angle_coor[i].z=origi_coor.z+LWH.z;
mybox-angle_coor[5].x=origi_coor.x+LWH.x;
mybox-angle_coor[6].x=origi_coor.x+LWH.x;
mybox-angle_coor[6].y=origi_coor.y+LWH.y;
mybox-angle_coor[7].y=origi_coor.y+LWH.y;
}
void move_in_box(BALL* myball,BOX mybox) //勻速運動
{
myball-cur_coor.x+=myball-speed.x;
myball-cur_coor.y+=myball-speed.y;
myball-cur_coor.z+=myball-speed.z;
}
void hit_wall(BALL* myball,POINT3D dir) //撞牆
{
myball-speed.x*=dir.x;
myball-speed.y*=dir.y;
myball-speed.z*=dir.z;
}
int coll_dete_rad_ign(BALL* myball,BOX mybox) //檢測(忽略半徑)
{
POINT3D dir;
dir.x=1;dir.y=1;dir.z=1;
if(myball-cur_coor.x=mybox.angle_coor[0].x ||myball-cur_coor.x=mybox.angle_coor[6].x)
dir.x=-1;
if(myball-cur_coor.y=mybox.angle_coor[0].y ||myball-cur_coor.y=mybox.angle_coor[6].y)
dir.y=-1;
if(myball-cur_coor.z=mybox.angle_coor[0].z ||myball-cur_coor.z=mybox.angle_coor[6].z)
dir.z=-1;
if(dir.x==-1 ||dir.y==-1 ||dir.z==-1){hit_wall(myball,dir);return 1;}
return 0;
}
#endif
//BALL.H文件結束
/*Ball.c:測試代碼*/
#include “Ball.h”
#include stdio.h
int main(void)
{
POINT3D origi;
POINT3D LWH;
BOX mybox;
BALL myball;
int i;
origi.x=0;origi.y=0;origi.z=0;
printf(“矩形空間尺寸:”);
scanf(“%f%f%f”,LWH.x,LWH.y,LWH.z);
printf(“球的初始坐標:”);
scanf(“%f%f%f”,myball.cur_coor.x,myball.cur_coor.y,myball.cur_coor.z);
printf(“球的速度:”);
scanf(“%f%f%f”,myball.speed.x,myball.speed.y,myball.speed.z);
/* LWH.x=10;LWH.y=10;LWH.z=10;
myball.cur_coor.x=5;myball.cur_coor.y=5;myball.cur_coor.z=5;
myball.speed.x=0.2;myball.speed.y=0.5;myball.speed.z=1;*/
i=0;init_box(mybox,origi,LWH);
printf(“\n相關信息如下:\n”);
printf(“矩形空間尺寸–L:%f,W:%f,H:%f\n”,LWH.x,LWH.y,LWH.z);
printf(“球的初始坐標–X:%f,Y:%f,Z:%f\n”,myball.cur_coor.x,myball.cur_coor.y,myball.cur_coor.z);
printf(“球的初始速度–X:%f,Y:%f,Z:%f\n”,myball.speed.x,myball.speed.y,myball.speed.z);
printf(“碰撞點坐標如下:\n”);
while(i10)
{
if(coll_dete_rad_ign(myball,mybox)==1)
{
i++;
printf(“%f,%f,%f\n”,myball.cur_coor.x,myball.cur_coor.y,myball.cur_coor.z);
}
move_in_box(myball,mybox);
}
return 0;
}
請教C語言大神小球反彈問題。。。指出我的錯誤,並告知為何會出現如此結果。。
sum的公式不對.你算一下不就知道了.
落下一次,後彈起.總路程:h+0.25h;而你的代碼裡面i=1;算出來的sum=h+0.5h;
假如第二次彈起.總路程:h+0.25h+0.25h+0.25*0.25h;
你代碼裡面算一下:h+0.5h+2*0.25*0.25h;
你的演算法可以寫成
for(i=1;im;i++){
sum+=h; 等同sum=sum+h;
h*=0.25;等同於h=0.25*h;
}
sum+=h;
你再算一下看看對不對.
c語言一個球從80米高空落下,落地反覆彈起。每次彈起高度是上次的一半,求次8次落地所經過的總路程
沒有什麼特別的含義,n=2,主要和n8一起使用,你可以想想,球總共8次落地,彈起「七次」,而for(n=2;n8;n++)正好循環「七次」。。你喜歡的話for(n=3;n9;n++),又有什麼不可以呢?希望對你有所幫助!
C語言,一個球從100米高度自由落下,每次落地後反彈回原高度的一半,再落下。求它在第10次落地時
sn=sn+2*hn; 前邊的sn的值就是,上一次sn的值加這次一上一下的值么。
一上一下就是2次么,2次就是乘上高度的2倍么。比如第一次彈起來,上去了50米 那下來也是50米啊,再接觸到地面那就是第二次彈起了是不是。第二次也是上去25米,下來25米,接觸到地面了就是第三次了,依此類推不都是高度的2倍么。
仔細理解一下是不是。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/199179.html