¥N½X:
#include <iostream.h>
#include <math.h>
float calculate_Sx(float Vinit, float degree, float timeSlice);
float calculate_Sy(float Vinit, float degree, float Height,float timeSlice);
void receiveInputData(float &Vinit,float &height, float °ree);
float G=9.8;
struct ObjectInfo // ª«Å骺®É¶¡¡A®y¼Ð
{
float currentTime;
float x;
float y;
};
void receiveInputData(float &Vinit,float &height,float °ree)
{
cout<<"©ßÅé¹B°Ê\n" ;
cout<<"½Ð¿é¤Jªì©l³t«×(¥H¯BÂI¼Æ©Î¾ã¼Æ)¡G";
cin>>Vinit;
cout<<"§A¿é¤Jªºªì©l³t«×¬°¡G"<<Vinit<<endl;
cout<<"½Ð¿é¤Jªì©l°ª«×(¥H¯BÂI¼Æ©Î¾ã¼Æ)¡G";
cin>>height;
cout<<"§A¿é¤Jªºªì©l°ª«×¬°¡G"<<height<<endl;
cout<<"½Ð¿é¤J©ßÅ騤«×(¥H¯BÂI¼Æ©Î¾ã¼Æ)(³æ¦ì¡G«×)¡G";
cin>>degree;
cout<<"§A¿é¤Jªº©ßÅ騤«×¬°¡G"<<degree<<endl;
}
float calculate_Sx(float Vinit, float degree, float time)
{
float Sx=0;
float radian=0;
radian = (3.14*degree)/180.0;
Sx = Vinit*cos(radian)*time;
return Sx;
}
float calculate_Sy(float Vinit, float degree, float height,float time)
{
float Sy=0;
float radian=0;
radian = (3.14*degree)/180.0;
Sy = height + Vinit*sin(radian)*time - 0.5*G*pow(time,2.0);
if(Sy <= 0) return 0;
return Sy;
}
bool isItOnAir(float currentSy)
{
if (currentSy <= 0)
{
return false;
}
else
{
return true;
}
}
float onAirTime(float Vinit, float degree, float height,float timeSlice)
{
float elapseTime=0;
float Sy=0;
do
{
elapseTime = elapseTime+timeSlice;
Sy = calculate_Sy(Vinit,degree,height,elapseTime);
}
while(isItOnAir(Sy)); // ©Î while(Sy > 0) ;
return elapseTime;
}
int main(void)
{
float Sx=0;
float Sy=0;
float time=0;
float degree=0;
float Vinitial=0;
float height=0;
float timeSlice = 0.1;
float currentTime=0;
float elapseTime=0;
int arraySize=0;
int index=0;
receiveInputData(Vinitial,height,degree); // ¿é¤J¤¶±
elapseTime = onAirTime(Vinitial,degree,height,timeSlice); // º¢ªÅ®É¶¡
elapseTime = elapseTime + 3; //¸¨¦a«ùÄò3¬í¹B°Ê
arraySize = (int)(elapseTime/timeSlice);
ObjectInfo *objectInfoArray;
// ªì©l¤Æ¹B°Êª«Å骺Àx¦s¸ê°T ¡A°t¸m°O¾ÐÅé
objectInfoArray = (ObjectInfo *)malloc(arraySize*sizeof(ObjectInfo));
do
{
currentTime = currentTime+timeSlice;
Sx = calculate_Sx(Vinitial,degree,currentTime);
Sy = calculate_Sy(Vinitial,degree,height,currentTime);
objectInfoArray[index].currentTime = currentTime;
objectInfoArray[index].x = Sx;
objectInfoArray[index].y = Sy;
index++;
}
while(isItOnAir(Sy)); //©Î while(Sy > 0);
// continue move 3 seconds
float onGroundTime = currentTime;
do
{
currentTime = currentTime+timeSlice;
Sx = calculate_Sx(Vinitial,degree,currentTime);
Sy = calculate_Sy(Vinitial,degree,height,currentTime);
objectInfoArray[index].currentTime = currentTime;
objectInfoArray[index].x = Sx;
objectInfoArray[index].y = Sy;
index++;
}while((onGroundTime+3) >= currentTime);
//¿é¥X¤¶±
for(int i=0;i<arraySize;i++)
cout<<i<<",time="<<objectInfoArray[i].currentTime<<",(x="<<objectInfoArray[i].x<<",y="<<objectInfoArray[i].y<<")"<<endl;
return 0;
}
ªº§Ú...ü...