Thursday, April 14, 2016

Wave Simulation Using Visual Python.


 I used previous code (with matplotlib animation).

 Removed the matplotlib part, swap it with vpython, :)



"""
Gelombang
"""
import numpy as np                          #untuk operasi array
from visual import *

#variabel
n   = 39
x   = np.arange(0., 1.,1./n )   #array dari 0 s.d 1 berjarak 1/n
y   = np.zeros(n)               #array sejumlah n isinya 0
y1  = np.zeros(n)               # y1 : array [0..n] of real
y2  = np.zeros(n)
y1  = np.exp(-1*np.power(10*x-3,2))
y2  = np.exp(-1*np.power(10*x-3,2))

r2  = 1./512   

display(center=(.5,0,0),background=(1,1,1))
#kotak
dindingKiri   = box (pos=(0.,0,0), length=.01, height=1, width=1, color=color.green)
dindingKanan   = box (pos=(1.,0,0), length=.01, height=1, width=1, color=color.blue)
bola    = []
for i in range(n):
    ball            = sphere (pos=(x[i],y2[i],0), radius=.01, color=color.red)
    bola.append(ball)

#nilai awal fungsi gaussian

#print y2


def proses():
    #hitung nilai baru
    for i in np.arange(1,n-1):
        y[i]    =   2*(1-r2)*y1[i]-y2[i]+r2*(y1[i+1]+y1[i-1])
    #geser
    y2[:]   =   y1[:]
    y1[:]   =   y[:]
    #print y2

    return y2

while 1:
    rate(100)
    proses()
    for i in np.arange(n):
        bola[i].y   = y2[i]


.