当前位置:   article > 正文

vpython学习--实现滑块木板联动_vpython物理教学

vpython物理教学

先看实现后的动画
说明:黄色箭头出现即指向的位置,为二者达到共速点的位置

滑块木板运动动画

原码

from vpython import *
'''
'''
#滑块参数
l1, h1, w1 = 0.2, 0.2, 0.2 #长高宽
m1, v1, c1 = 2, 5, color.red
#木板参数
l2, h2, w2 = 1, 0.2, 0.4 #长高宽
m2, v2, c2 = 0.5, 0, color.green
# 公共参数
floor_l=6  #地板长度
g = 10     #重力加速度
dt = 0.0001 # 时间间隔
mu = 0.3   #滑动摩擦系数
t = 0      #时间
i = 0      #共速标志位,同时控制循环跳出
iMax = 1200 #达到共速后,为了动画好看,再滑动一会

''' 滑板运动的场景'''
room = canvas(title='板块滑动动画', width = 800, height=600, center=vec(0, 0.5, 0),
                 background=color.gray(0.4))
cameraPos = vec(1.5,2,4) 
room.camera.pos = cameraPos            #摄像机,即观察者的位置
room.camera.axis = cameraPos * -1      #摄像机对准的方向,这里指向原点
x = arrow(pos=vector(0,0,0), axis=vector(1,0,0), length=2, shaftwidth=0.1, color=color.white)                     #坐标轴
y = arrow(pos=vector(0,0,0), axis=vector(0,1,0), length=2, shaftwidth=0.1, color=color.white)
#z = arrow(pos=vector(0,0,0), axis=vector(0,0,1), length=2, shaftwidth=0.1, color=color.white)
# 画地面
floor = box(pos=vec(0.5 * floor_l, -0.1, 0), size=vec(floor_l,0.2,4), color=color.gray(0.6))
# 画木板
ban = box(pos=vec(0.5*l2, 0.5*h2, 0), size=vec(l2, h2, w2), color=c2, v=vec(v2,0,0))
# 画滑块
kuai = box(pos=vec(-1, h2+0.5*h1, 0), size=vec(l1,h1,w1),color=c1,v=vec(v1,0,0))

# 画v-t图像
tu=graph(title='v-t图像', x=650, y=300, width=600, height=450, xtitle="t(s)", ytitle="v(m/s), 红色:滑块;绿色:木板")
kuai_vt = gcurve(graph=tu,color=c1)
ban_vt = gcurve(graph=tu, color=c2)

while kuai.pos.x < 0:
    rate(1000)
    kuai.pos.x += kuai.v.x * dt
""" 制作动态过程"""
#执行循环,滑块掉下来或者
while (ban.pos.x + l1 / 2) >= ban.pos.x >= 0 and i < iMax:
    # print(kuai.v.x , ban.v.x)
    rate(1000)
    if kuai.v.x > ban.v.x:
        f = mu*m1*g
        ban.a = vec(f/m2, 0, 0)
        kuai.a = vec(-f/m1, 0, 0)
    elif kuai.v.x < ban.v.x:
        f = mu*m1*g
        ban.a = vec(-f/m2, 0, 0)
        kuai.a = vec(f/m1, 0, 0)
    else:
        f = 0
        ban.a = vec(0, 0, 0)
        kuai.a = vec(0, 0, 0)

    #求共速的时间
    if abs(kuai.v.x - ban.v.x) < 0.005 and i==0:
        T = t
        i = 1
        # 在共速的位置弄个箭头作标识
        arrow(pos=vec(kuai.pos.x, 1, 0),axis=vector(0,-1,0), length=0.6, shaftwidth=0.1, color=color.yellow)
    elif i >0:
        # 共速后,为了动画好看,再滑动一点时间
        i += 1

    # 求两物体速度和位置
    ban.v += ban.a * dt
    kuai.v += kuai.a * dt
    ban.pos += ban.v * dt
    kuai.pos += kuai.v * dt

    # 画出 v-t 图
    ban_vt.plot(pos=(t, ban.v.x))
    kuai_vt.plot(pos=(t, kuai.v.x))

    t += dt

# 求相对位移
S =  kuai.pos.x - 0.5*l1 - (ban.pos.x - 0.5*l2)

print('到达共速的时间:', T)
print('相对位移:', S)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

感谢B站大神布鲁斯特147

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/811069
推荐阅读
相关标签
  

闽ICP备14008679号