#本人原創,費了不少功夫計算推導公式,通過驗證非常完美
#兩球的位置和速度,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的速度走到木棍一端就會掉下去。現在知道它們起始位置 相對於木棍左端點的距離 但是不知道它們爬行的方向。兩隻螞蟻相遇後,它們會掉頭往反方向走。求所有螞蟻都落下木棍的最短時間和最長時間。如果採用窮舉搜尋的辦法列舉所有螞蟻的初始朝向,那麼...