如何在视觉 python 中停止 n 耦合质量动画中的框重叠?
How to stop overlapping of boxes in animation of n coupled masses in visual python?
这个问题可能比 vpython 更像是一个物理问题,因为我不知道代码或物理问题是否正确 wrong.I 我正在尝试编写一个关于 n 耦合动画的程序spring 海量系统使用python 的视觉模块。
我看不出哪里出了问题,但是质量(即使 no.of 质量只有两个)经常重叠,我怎样才能改变边界条件,或者其他东西,使它们不重叠(如现实)?
代码是:
from visual import *
from math import cos
m=[1,2]#list of masses
k=[1,2,1]#list of spring constants
R=len(m)#number of masses
floor=box(pos=(0,-0.5,0),size=(10,0.01,10),color=color.blue,material=materials.wood)#resting table
boxlist=[]#for creation of the masses
for z in range(0,R):
boxlist.append(box(pos=(4*z,0,0),size=(0.5,0.5,0.5),color=color.red,material=materials.wood))
#a is the matrix whose eigenvalues are the square of angular frequencies,and eigenvectors are the amplitudes
a=[[0 for r in range(R)]for c in range(R)]
for i in range(0,R):
if i>0:
a[i][i-1]=-k[i]/float(m[i])
if i<R-1:
a[i][i+1]=-k[i+1]/float(m[i])
a[i][i]=k[i]/float(m[i])+k[i+1]/float(m[i])
val=eig(a)[0]
vec=eig(a)[1]
t=0
dt=0.01
s=0
S=[]
while True:
rate(100)
for i in range(0,R):
for j in range(0,R):
s+=vec[j][i]*cos(((val[j])**0.5)*t)#x=Acos(wt),allowing phase angle to be zero
S.append(s)
s=0
for z in range(0,R):
boxlist[z].pos.x=S[z]
S=[]
t+=dt
您提供的程序不会 运行,因为 "eig" 未定义。这使得无法探索您的问题。
这是一个包含许多弹簧和质量的程序示例:
https://www.glowscript.org/#/user/GlowScriptDemos/folder/Examples/program/AtomicSolid-VPython
点击"View this program"查看代码。
我注意到您使用的是非常旧的 VPython 版本。有关如何使用当前版本的信息,请参阅 vpython.org。
这个问题可能比 vpython 更像是一个物理问题,因为我不知道代码或物理问题是否正确 wrong.I 我正在尝试编写一个关于 n 耦合动画的程序spring 海量系统使用python 的视觉模块。 我看不出哪里出了问题,但是质量(即使 no.of 质量只有两个)经常重叠,我怎样才能改变边界条件,或者其他东西,使它们不重叠(如现实)? 代码是:
from visual import *
from math import cos
m=[1,2]#list of masses
k=[1,2,1]#list of spring constants
R=len(m)#number of masses
floor=box(pos=(0,-0.5,0),size=(10,0.01,10),color=color.blue,material=materials.wood)#resting table
boxlist=[]#for creation of the masses
for z in range(0,R):
boxlist.append(box(pos=(4*z,0,0),size=(0.5,0.5,0.5),color=color.red,material=materials.wood))
#a is the matrix whose eigenvalues are the square of angular frequencies,and eigenvectors are the amplitudes
a=[[0 for r in range(R)]for c in range(R)]
for i in range(0,R):
if i>0:
a[i][i-1]=-k[i]/float(m[i])
if i<R-1:
a[i][i+1]=-k[i+1]/float(m[i])
a[i][i]=k[i]/float(m[i])+k[i+1]/float(m[i])
val=eig(a)[0]
vec=eig(a)[1]
t=0
dt=0.01
s=0
S=[]
while True:
rate(100)
for i in range(0,R):
for j in range(0,R):
s+=vec[j][i]*cos(((val[j])**0.5)*t)#x=Acos(wt),allowing phase angle to be zero
S.append(s)
s=0
for z in range(0,R):
boxlist[z].pos.x=S[z]
S=[]
t+=dt
您提供的程序不会 运行,因为 "eig" 未定义。这使得无法探索您的问题。
这是一个包含许多弹簧和质量的程序示例: https://www.glowscript.org/#/user/GlowScriptDemos/folder/Examples/program/AtomicSolid-VPython
点击"View this program"查看代码。
我注意到您使用的是非常旧的 VPython 版本。有关如何使用当前版本的信息,请参阅 vpython.org。