#两个刚性小球在指定范围内碰撞,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)