12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #两个刚性小球在指定范围内碰撞,1个有轨迹,1个没有
- from stdpackage import stddraw
- stddraw.setXscale(-1.0,1.0)
- stddraw.setYscale(-1.0,1.0)
- DT = 20
- RADIUS = 0.1
- r1x = 0.480
- r1y = 0.860
- v1x = 0.015
- v1y = 0.023
- position1 = [(r1x,r1y)]
- r2x = 0.080
- r2y = -0.360
- v2x = 0.03
- v2y = 0.02
- position2 = [(r2x,r2y)]
- changepoint = []
- while True:
- if (abs(r1x+v1x-r2x-v2x)<2*RADIUS and abs(r1y+v1y-r2y-v2y)<2*RADIUS):
- print(r1x,v1x,r2x,v2x,'change')
- a = v1x
- v1x = v2x
- v2x = a
- changepoint.append((r1x,r1y,r2x,r2y))
- # stddraw.line(r1x,r1y,r2x,r2y)
- # stddraw.show()
- a = v1y
- v1y = v2y
- v2y = a
- # break
- if abs(r1x+v1x)+RADIUS>1.0: v1x = -v1x
- if abs(r1y + v1y)+RADIUS >1.0:v1y = -v1y
- if abs(r2x+v2x)+RADIUS>1.0: v2x = -v2x
- if abs(r2y + v2y)+RADIUS >1.0:v2y = -v2y
- r1x = r1x+v1x
- r1y = r1y + v1y
- r2x = r2x+v2x
- r2y = r2y + v2y
- position1.append((r1x,r1y))
- stddraw.clear(stddraw.LIGHT_GRAY)
- stddraw.setPenColor(stddraw.GRAY)
- for x,y in position1[-50:]:
- print(x,y)
- stddraw.circle(x,y,RADIUS)
- stddraw.setPenColor(stddraw.BLACK)
- stddraw.filledCircle(r1x,r1y,RADIUS)
- stddraw.filledCircle(r2x,r2y,RADIUS)
- stddraw.show(DT)
|