Saturday, May 7, 2016

Normal Mode


 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()

    
    
    
    

    

.