ÂsÄý³æ­Ó¤å³¹
½Ö§ä§Ú
Major Member
 
½Ö§ä§Úªº¤jÀY·Ó
 

¥[¤J¤é´Á: Aug 2005
±zªº¦í§}: Åwªï¥[¤JTHK
¤å³¹: 161
°Ñ¦Ò¥Î..¨ä¥L¾a§AªB¤Í¦Û¤vÅo..

¥[ªo¡A
§O¿éµ¹®aùØÃÛ¼o§÷...

¥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 &degree);
float G=9.8;

struct ObjectInfo // ª«Å骺®É¶¡¡A®y¼Ð 
{
       float currentTime;
       float x;
       float y;
};
      
void receiveInputData(float &Vinit,float &height,float &degree)
{
     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;  
}


ªº§Ú...­ü...
__________________
»@ª÷100¸U¤¸¡C ¬ì§Þ¤£¼Ä¤H©Ê¡C
ÂÂ 2007-01-09, 08:12 PM #18
¦^À³®É¤Þ¥Î¦¹¤å³¹
½Ö§ä§ÚÂ÷½u¤¤