Planned to write coupled oscillator, using double spring.
For some reason, Vpython refused to set length of helix with some value from array or list or any value derived from them. It only accept plain number or number from simple variable (like a = 3. ). It hugely messed the whole script as I used l = [] for helix length.
So, rewriting the code, create l0 and l1 manually.
Didn't have energy to code the rest. So, at the moment, just call it "normal mode" coupled oscillator, heheh...
#code
from visual import *
from random import uniform,random
from visual.controls import *
display(center=(0,0,0),background=(1,1,1), autoscale=False, range=(5,5,3),
width=600, height=600, forward=(-1.4,-1.3,-1)) #arah kamera
distant_light(direction=(1,1,1), color=color.red)
n = 2
dt = 1./8.
pegas = []
kotak = []
w = ones(n)
w /= 2.
for i in arange(n):
spring = helix(pos=(0,0,0), axis=(5,0,0), radius=0.2, color=color.red, length=1.)
pegas.append(spring)
ko = box(pos=(0,0,0), width=.5, height=.5, length= .5, color= color.green)
kotak.append(ko)
k0 = 1.
m0 = 1.
l00 = 1.
l01 = 1.
l0 = 1.1
l1 = 1.
x0 = l0+w[0]/2
v0 = 0.
v1 = 0.
y = 1.
print pegas[0].length
def updatePegas():
global x0
kotak[0].x = x0
pegas[0].length = l0
x1 = l0+w[0]+l1+w[1]/2
kotak[1].x = x1
pegas[1].x = l0+w[0]
def proses():
global l0,v0,x0
dx = l0-l00
f0 = -k0*dx
a0 = f0/m0
v0 += a0*dt
l0 += v0*dt
x0 = l0+w[0]/2
updatePegas()
while 1:
rate (19)
y += .1
proses()
No comments:
Post a Comment