球体弾性衝突の位置および速度計算アルゴリズム

#私の元には、努力の計算式の多くは、完全な検証により導出されます

#二つの目標の位置と速度、Rは半径であり、質量互いに異なる品質と容易半径を有する、本明細書において提供される
DEFコリジョン(LOC1、LOC2、SP1、SP2):
  X、Y = LOC1の
  X2、Y2 = LOC2
  DLX、DLY X2-X = Y Y2-

  DX、のDy = SP1の
  DX2、DY2 = SP2
  DVX、DVY = DX-DX2、DY-DY2の

  現在の"過度の衝突"とは、位置要求接線方向の位置に戻った場合、先行#

  もし** 2 + DLY DLX 2 <R&LT ** 2:
    X、X-Y = DX、DyをY-
    X2、Y2-DX2 = X2、Y2-DY2
    DLX、DLY = X-X2、Y2-Y
    B = ** 2 * R&LT(DVX DVY ** 2 + 2) - (* DLX DVY - DVX DLY *)** 2
    #が衝突までの時間を算出し
    、P = -dlx * DVX -dly * DVY + math.sqrt(B)
    P2 = -dlx * -dly DVX * DVY - math.sqrt(B)

    もしDVX ** 2 + DVY ** 2 == 0:
      トン= 1

    2〜#それがされるので、接線は二つの溶液、小さな取る有する
    :他
      TEMP =分((ABS(P)、ABS(P2)))
      ** T =(TEMP)/(2 + DVYのDVXを2)


    #衝突位置
    LOC1 * DX = X + T、Y + T *のDy
    LOC2 = Tの*のX2 + DX2、T * Y2 + DY2


    ##プリント(math.sqrt((LOC1 [1] -loc2 [1])** 2+(LOC1 [0] -loc2 [0])** 2))

    #は、衝突速度、運動量の交換要求後に変更
    :DLY == 0 IF
      EY = 0
      EX = DVX
     他:
      K = DLX / DLY
    EY =(K * + DVY DVX)/(K * Kの+ 1)
    EX = K * EY
    SP1 = -ex DX、DY-EY
    SP2 = DX2 + EX、EY + DY2の
  リターン[LOC1、LOC2、SP1、SP2]

おすすめ

転載: www.cnblogs.com/chgq/p/11105978.html