|
> No.3417[元記事へ]
lark12_longさんへのお返事です。
!こちらが、見やすいです。
!---------------------------------------------------------------
! 球同士の衝突( 球表面の摩擦係数0、同質量)
!
! ※法線単位ベクトルの内外向き、
! 接線単位ベクトルの回転向きは、(i)(j)が共用 する限り何れも可。
!---------------------------------------------------------------
SUB cal1
IF n>=2 THEN
FOR j=0 TO n-1
IF i<>j THEN
LET lb=SQR( (xb(i)-xb(j))^2+(yb(i)-yb(j))^2) !過去の球(i)(j)間距離
LET l=SQR( ( x(i) -x(j))^2+( y(i) -y(j))^2) !現在の球(i)(j)間距離
IF l<=2*r AND l< lb THEN !距離と、その増減で、衝突判定
LET nx=(x(i)-x(j))/l !接触点 法線単位ベクトル x 成分
LET ny=(y(i)-y(j))/l ! 〃 y 成分
LET tx=-ny ! 接線単位ベクトル x 成分
LET ty= nx ! 〃 y 成分
!--
LET v_in=nx*vx(i)+ny*vy(i) !接触点 法線方向の 球(i)速度ベクトル内積
LET v_jn=nx*vx(j)+ny*vy(j) ! 〃 球(j)速度ベクトル内積
swap v_in, v_jn ! 〃 球(i)(j)速度 入替り
LET v_it=tx*vx(i)+ty*vy(i) ! 接線方向の 球(i)速度ベクトル内積
LET v_jt=tx*vx(j)+ty*vy(j) ! 〃 球(j)速度ベクトル内積
!--
LET vx(i)= nx*v_in +tx*v_it !球(i)速度ベクトルの x 成分
LET vy(i)= ny*v_in +ty*v_it ! 〃 y 成分
LET vx(j)= nx*v_jn +tx*v_jt !球(j)速度ベクトルの x 成分
LET vy(j)= ny*v_jn +ty*v_jt ! 〃 y 成分
END IF
END IF
NEXT j
END IF
END SUB
|
|