青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

C++ Program Code for 2D Elastic Collision of 2 Balls

from:http://www.plasmaphysics.org.uk/programs/coll2d_cpp.htm

//******************************************************************************
//   This program is a 'remote' 2D-collision detector for two balls on linear
//   trajectories and returns, if applicable, the location of the collision for 
//   both balls as well as the new velocity vectors (assuming a fully elastic
//   collision).
//   In  'f' (free) mode no positions but only the initial velocities
//   and an impact angle are required.
//   All variables apart from 'mode' and 'error' are of Double Precision
//   Floating Point type.
//
//   The Parameters are:
//
//    mode  (char) (if='f' alpha must be supplied; otherwise arbitrary)
//    alpha (impact angle) only required in mode='f'; 
//                     should be between -PI/2 and PI/2 (0 = head-on collision))
//    m1   (mass of ball 1)
//    m2   (mass of ball 2)
//    r1   (radius of ball 1)        not needed for 'f' mode
//    r2   (radius of ball 2)                "
//  & x1   (x-coordinate of ball 1)          "
//  & y1   (y-coordinate of ball 1)          "
//  & x2   (x-coordinate of ball 2)          "
//  & y2   (y-coordinate of ball 2)          "
//  & vx1  (velocity x-component of ball 1) 
//  & vy1  (velocity y-component of ball 1)         
//  & vx2  (velocity x-component of ball 2)         
//  & vy2  (velocity y-component of ball 2)
//  & error (int)  (0: no error
//                  1: balls do not collide
//                  2: initial positions impossible (balls overlap))
//
//   Note that the parameters with an ampersand (&) are passed by reference,
//   i.e. the corresponding arguments in the calling program will be updated;
//   however, the coordinates and velocities will only be updated if 'error'=0.
//
//   All variables should have the same data types in the calling program
//   and all should be initialized before calling the function even if
//   not required in the particular mode.
//
//   This program is free to use for everybody. However, you use it at your own
//   risk and I do not accept any liability resulting from incorrect behaviour.
//   I have tested the program for numerous cases and I could not see anything 
//   wrong with it but I can not guarantee that it is bug-free under any 
//   circumstances.
//
//   I would appreciate if you could report any problems to me
//   (for contact details see  http://www.plasmaphysics.org.uk/feedback.htm ).
//
//   Thomas Smid, January  2004
//                December 2005 (corrected faulty collision detection; 
//                               a few minor changes to improve speed;
//                               added simplified code without collision detection)
//*********************************************************************************

       
void collision2D(char mode,double alpha,
                 
double m1, double m2, double r1, double r2,
                 
double& x1, double& y1, double& x2, double& y2,
                 
double& vx1, double& vy1, double& vx2, double& vy2,
                 
int& error )     {

       
double  r12,m21,d,gammav,gammaxy,dgamma,dr,dc,sqs,t,
               dvx2,a,x21,y21,vx21,vy21,pi2;

//     ***initialize some variables ****
       pi2=2*acos(-1.0E0);
       error
=0;
       r12
=r1+r2;
       m21
=m2/m1;
       x21
=x2-x1;
       y21
=y2-y1;
       vx21
=vx2-vx1;
       vy21
=vy2-vy1;



//     ****  return old positions and velocities if relative velocity =0 ****
       if ( vx21==0 && vy21==0 ) {error=1return;}


//     *** calculate relative velocity angle             
       gammav=atan2(-vy21,-vx21);




//******** this block only if initial positions are given *********

       
if (mode != 'f'{

       
       d
=sqrt(x21*x21 +y21*y21);
       
//     **** return if distance between balls smaller than sum of radii ***
       if (d<r12) {error=2return;}

//     *** calculate relative position angle and normalized impact parameter ***
       gammaxy=atan2(y21,x21);
       dgamma
=gammaxy-gammav;
          
if (dgamma>pi2) {dgamma=dgamma-pi2;}
           
else if (dgamma<-pi2) {dgamma=dgamma+pi2;}
       dr
=d*sin(dgamma)/r12;
       
//     **** return old positions and velocities if balls do not collide ***
       if (  (fabs(dgamma)>pi2/4 && fabs(dgamma)<0.75*pi2) || fabs(dr)>1 )   
           
{error=1return;}


//     **** calculate impact angle if balls do collide ***
       alpha=asin(dr);

       
//     **** calculate time to collision ***
       dc=d*cos(dgamma);
       
if (dc>0{sqs=1.0;} else {sqs=-1.0;}
       t
=(dc-sqs*r12*sqrt(1-dr*dr))/sqrt(vx21*vx21+ vy21*vy21);
//    **** update positions ***
       x1=x1+vx1*t;
       y1
=y1+vy1*t;
       x2
=x2+vx2*t;
       y2
=y2+vy2*t;

       
   }


//******** END 'this block only if initial positions are given' *********
      
       
       
//     ***  update velocities ***

       a
=tan( gammav +alpha);

       dvx2
=-2*(vx21 +a*vy21) /((1+a*a)*(1+m21));
       
       vx2
=vx2+dvx2;
       vy2
=vy2+a*dvx2;
       vx1
=vx1-m21*dvx2;
       vy1
=vy1-a*m21*dvx2;


       
return;
}




//******************************************************************************
//  Simplified Version
//  The advantage of the 'remote' collision detection in the program above is 
//  that one does not have to continuously track the balls to detect a collision. 
//  The program needs only to be called once for any two balls unless their 
//  velocity changes. However, if somebody wants to use a separate collision 
//  detection routine for whatever reason, below is a simplified version of the 
//  code which just calculates the new velocities, assuming that the balls are 
//  already touching and approaching each other (these two conditions are 
//  important as otherwise the results will be incorrect)
//****************************************************************************


       
void collision2Ds(double m1, double m2,
                 
double x1, double y1, double x2, double y2,
                 
double& vx1, double& vy1, double& vx2, double& vy2)     {

       
double  m21,dvx2,a,x21,y21,vx21,vy21,fy21,sign;


       m21
=m2/m1;
       x21
=x2-x1;
       y21
=y2-y1;
       vx21
=vx2-vx1;
       vy21
=vy2-vy1;



//     *** I have inserted the following statements to avoid a zero divide; 
//         (for single precision calculations, 
//          1.0E-12 should be replaced by a larger value). **************  
  
       fy21
=1.0E-12*fabs(y21);                            
       
if ( fabs(x21)<fy21 ) {  
                   
if (x21<0{ sign=-1; } else { sign=1;}  
                   x21
=fy21*sign; 
        }
 

//     ***  update velocities ***
       a=y21/x21;
       dvx2
= -2*(vx21 +a*vy21)/((1+a*a)*(1+m21)) ;
       vx2
=vx2+dvx2;
       vy2
=vy2+a*dvx2;
       vx1
=vx1-m21*dvx2;
       vy1
=vy1-a*m21*dvx2;


       
return;
}

posted on 2007-12-25 16:12 楊粼波 閱讀(415) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜一区二区三区不卡视频| 欧美日韩亚洲一区| 欧美高清视频| 免费在线看一区| 欧美黑人在线观看| 亚洲精品中文字幕女同| 99热这里只有精品8| 亚洲视频 欧洲视频| 午夜精品在线视频| 久久亚洲精品网站| 欧美日韩在线看| 国产亚洲精品一区二555| 一区福利视频| 亚洲私拍自拍| 毛片一区二区三区| 亚洲乱码一区二区| 欧美在线观看一区二区三区| 久久综合久久久久88| 欧美日产一区二区三区在线观看| 亚洲黄一区二区| 欧美精品自拍偷拍动漫精品| 欧美日韩精品免费在线观看视频| 欧美日韩综合不卡| 黄色精品一区| 亚洲午夜一区二区三区| 久久综合狠狠| 亚洲无线视频| 欧美精品一区三区在线观看| 国产日韩专区在线| 亚洲最新视频在线| 免费国产一区二区| 亚洲嫩草精品久久| 欧美日韩一区二区国产| 激情久久影院| 午夜日韩激情| 日韩五码在线| 欧美高清hd18日本| 原创国产精品91| 欧美专区在线观看| 一区二区三区欧美在线| 欧美黑人在线播放| 亚洲国产精品一区二区三区| 久久久国产精品一区二区三区| 美女国产一区| 午夜精品福利一区二区三区av | 老司机成人网| 国产欧美精品一区| 亚洲男人的天堂在线aⅴ视频| 亚洲国产精品久久久久秋霞蜜臀 | 中文一区在线| 亚洲高清一二三区| 久久久久网址| 国产在线精品自拍| 欧美在线欧美在线| 亚洲无线视频| 国产精品美女999| 午夜精品久久久99热福利| 日韩视频精品在线| 欧美三级在线视频| 亚洲一级在线| 亚洲一区免费观看| 国产老女人精品毛片久久| 欧美一级视频精品观看| 亚洲欧美成人一区二区在线电影 | 国产精品视频免费| 香蕉免费一区二区三区在线观看| 亚洲最新视频在线| 国产精品黄色| 中日韩视频在线观看| 亚洲一区尤物| 欧美日本网站| 一本到高清视频免费精品| 亚洲日本一区二区三区| 亚洲国产视频a| 欧美国产日韩免费| 亚洲人成高清| 日韩视频免费观看高清完整版| 欧美日韩国产亚洲一区| 亚洲免费在线视频| 欧美一站二站| 日韩视频免费观看| 亚洲一区二区三区国产| 狠狠色噜噜狠狠色综合久| 亚洲高清在线观看| 国产精品乱码妇女bbbb| 久久综合色影院| 欧美精品在线看| 久久av一区二区三区漫画| 久久人人97超碰精品888| 日韩亚洲欧美成人| 亚洲一区免费网站| 最新亚洲激情| 亚洲欧美在线高清| 亚洲精品视频免费| 亚洲欧美日韩天堂一区二区| 伊人久久成人| 中文日韩电影网站| 亚洲国产欧美一区二区三区久久 | 久久夜色撩人精品| 一区二区电影免费观看| 欧美影片第一页| 夜夜嗨av一区二区三区免费区| 性色av一区二区三区| 一本色道久久综合亚洲二区三区| 欧美影院精品一区| 亚洲一区二区三区精品在线| 久久人人爽国产| 久久精品成人| 国产精品magnet| 亚洲国产91精品在线观看| 国产日产精品一区二区三区四区的观看方式 | 午夜精品久久久久久久白皮肤| 久久这里只有| 久久久久一区二区| 国产伦精品一区| 一本色道久久综合亚洲精品不卡| 亚洲风情亚aⅴ在线发布| 欧美亚洲三级| 香蕉成人伊视频在线观看| 欧美日韩的一区二区| 欧美激情a∨在线视频播放| 日韩视频免费观看高清完整版| 欧美77777| 国内精品久久久久久久影视麻豆 | 亚洲网站在线观看| 欧美大片一区二区三区| 老司机精品导航| 狠狠色狠狠色综合日日91app| 亚洲一区二区av电影| 亚洲午夜一区二区三区| 欧美精品一区二区视频| 91久久精品国产91性色tv| 亚洲国产激情| 欧美成人综合网站| 亚洲国产精品久久久久秋霞影院| 亚洲大片在线| 免费欧美日韩| 欧美成人精品激情在线观看| 国产尤物精品| 久久aⅴ国产紧身牛仔裤| 久久成人综合视频| 国产一区二区日韩精品欧美精品| 午夜性色一区二区三区免费视频| 欧美一级黄色网| 国产亚洲福利一区| 久久久女女女女999久久| 欧美高潮视频| 亚洲伦理在线免费看| 欧美精品亚洲| 亚洲一区二区三区欧美| 久久国产视频网| 亚洲第一福利在线观看| 欧美大片免费观看| 亚洲靠逼com| 亚洲欧美视频| 韩国在线一区| 欧美高清视频在线播放| 中文高清一区| 麻豆成人精品| 一区二区免费看| 国产视频自拍一区| 欧美国产日本| 亚洲欧美在线看| 欧美成人精品在线观看| 一区二区免费在线视频| 国产视频一区欧美| 欧美大片91| 午夜久久资源| 亚洲第一主播视频| 欧美亚洲三级| 亚洲精品网址在线观看| 国产精品欧美日韩一区二区| 久久天天躁夜夜躁狠狠躁2022| 亚洲精品乱码久久久久久按摩观| 西西人体一区二区| 亚洲人成亚洲人成在线观看图片 | 亚洲毛片在线观看.| 国产精品视频第一区| 裸体一区二区三区| 销魂美女一区二区三区视频在线| 欧美第十八页| 久久久欧美一区二区| 日韩天堂av| 黄色亚洲大片免费在线观看| 欧美日本一区二区三区| 久久久精品网| 亚洲欧美日韩国产综合| 激情久久婷婷| 欧美日韩国产小视频在线观看| 久久精品一本| 国产中文一区二区| 欧美激情视频一区二区三区不卡| 香蕉成人啪国产精品视频综合网| 亚洲国产一二三| 久久夜色精品国产| 亚洲欧美一区二区原创| 日韩视频在线你懂得| 怡红院精品视频| 国产亚洲欧美日韩日本| 国产精品v日韩精品|