simakunのプロフィール

@simakun simakun
ありがとう数0
質問数0
回答数1
ベストアンサー数
1
ベストアンサー率
100%
お礼率
0%

  • 登録日2004/06/10
  • ボール同士の衝突

    2個のボールが衝突したときのおかしな挙動に困っています。 ちゃんと跳ね返るときもあれば、 いきなり高速移動する くっついたまま離れない。 以下が衝突時の関数です。 アドバイス等お願いします。 bool NearBall=false; void CBallBallView::BallCounter(CPoint *Pos1,CPoint *Pos2,int Radian1,int Radian2,Vector *Vec1,Vector *Vec2,double *SinB,double *CosB,double *SinD,double *CosD) { int Width=Pos1->x-Pos2->x; int Height=Pos1->y-Pos2->y; if(Width==0){return;} if((Radian1+Radian2)*(Radian1+Radian2)>=Width*Width+Height*Height &&NearBall==false) { double Cos=Width/sqrt((double)(Height+Width)*(Height+Width)); double Sin=Height/sqrt((double)(Height+Width)*(Height+Width)); double Tan=Sin/Cos; double tmpCos1; double tmpSin1; double tmpCos2; double tmpSin2; double SinA=*SinB; double CosA=*CosB; double SinC=*SinD; double CosC=*CosD; tmpCos1=(2*Cos*Cos-1)*CosA+2*Sin*Cos*SinA; tmpSin1=2*Sin*Cos*CosA-(2*Cos*Cos-1)*SinA; tmpCos2=(2*Cos*Cos-1)*CosC+2*Sin*Cos*SinC; tmpSin2=2*Sin*Cos*CosC-(2*Cos*Cos-1)*SinC; *CosB=-tmpCos1; *SinB=-tmpSin1; *CosD=-tmpCos2; *SinD=-tmpSin2; NearBall=true; } else { if((Radian1+Radian2)*(Radian1+Radian2)<Width*Width+Height*Height-300) { NearBall=false; } } }