球體彈性碰撞位置和速度計算演算法

2022-07-20 02:30:16 字數 846 閱讀 8835

#本人原創,費了不少功夫計算推導公式,通過驗證非常完美

#兩球的位置和速度,r為半徑,這裡設質量一樣,容易加上不同的質量和半徑

def collide(loc1,loc2,sp1,sp2):

x,y=loc1

x2,y2 = loc2

dlx,dly = x-x2,y-y2

dx,dy = sp1

dx2,dy2 = sp2

dvx,dvy = dx-dx2,dy-dy2

#假如當前「碰撞過度」則回到之前的位置再求相切時的位置

if dlx**2+dly**2if dvx**2 + dvy**2==0:

t=1#因為會相切兩次所以有兩個解,取較小乙個

else:

temp = min((abs(p),abs(p2)))

t = (temp)/(dvx**2 + dvy**2)

#碰撞時的位置

loc1 = x + t*dx , y +t*dy

loc2 = x2 + t*dx2, y2 + t*dy2

## print(math.sqrt((loc1[1]-loc2[1])**2+(loc1[0]-loc2[0])**2))

#碰撞後的速度改變,求動量交換

if dly==0:

ey=0

ex=dvx

else:

k = dlx/dly

ey=(dvy+k*dvx)/(1+k*k)

ex=k*ey

sp1 = dx -ex, dy-ey

sp2 = dx2+ex, dy2 + ey

return [loc1,loc2 ,sp1, sp2]

POJ 3684 彈性碰撞

碰撞問題。彈性碰撞交換速度和方向,可以當成兩個質點相互交錯而過,不影響最後的結果,因為只需要排序就可以知道,最低的一定是最先放下的,以此類推。include include include include include include include include include include...

poj3684(彈性碰撞模型)

題解 兩個球相撞返回,首先如果忽視掉體積,看成質點,那麼相撞返回就可以理解成兩個求擦肩而過,互不影響,就和poj1852螞蟻的思想是一樣的 這樣想就相當於把題目簡化了。然後又由於題目的真實情況,先掉落的球一定是所有球中最下面的乙個,所以對最後求得的資料進行排序即可。include include i...

POJ 1852 Ants(模擬 彈性碰撞)

題意 在一根長為l厘公尺的水平木棍上有n只螞蟻,它們以每秒1cm s的速度走到木棍一端就會掉下去。現在知道它們起始位置 相對於木棍左端點的距離 但是不知道它們爬行的方向。兩隻螞蟻相遇後,它們會掉頭往反方向走。求所有螞蟻都落下木棍的最短時間和最長時間。如果採用窮舉搜尋的辦法列舉所有螞蟻的初始朝向,那麼...