Sunday, May 29, 2016

Bouncing Ball inside a Cone


  I use vector projection and rejection to calculate velocity after bouncing the side of cone, :)





#code
from visual import *
from random import uniform

display(center=(0,2,0),background=(1,1,1), autoscale=False, range=4.5,        
        width=600, height=600,  forward=(-.4,-.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)

Cone        = cone(pos = (0,0,0), axis=(0,5,0), radius = 3, opacity = .2) 


bola        = sphere(color=color.green,radius=.2)
bola.y      = 1
bola.x      = -1
bola.z      = 1

v           = vector(1,-1,0)
dt          = 1./16
r           = bola.pos
rc          = Cone.radius
h           = vector(Cone.axis)

def pantul():
    global r,v
    #tumbukan dengan lantai
    if r.y<0:
        r.y = 0
        v.y *= -1

    rp      = vector(r.x,0,r.z)
    hb      = h.y - r.y
    rmaks   = hb/h.y*rc
    c       = h-rmaks*norm(rp)    #vektor garis singgung 
                                  #selimut kerucut dengan bidang singgung
    #tumbukan dengan selimut kerucut
    if mag(rp)>rmaks:
        rp  = norm(rp)*rmaks
        r   = vector(rp.x,r.y,rp.z)
        vp  = dot(v,norm(c))*norm(c)
        v   = 2*vp-v
    print v



def proses():
    global r,v
    a   = vector(0,0,0)
    v   += a*dt
    r   += v*dt

    bola.pos  = r

    pantul()

while 1:
    rate(37)
    proses()

.

Daun Jatuh.

 Megatruh: Apa-apaan ini Kin?

 Kinanthi: Apanya yang apa-apaan Meg?

 M: Puisimu ini?

 K: Kamu baca puisiku? Wow, horee..., aku punya tambahan penggemar

 M: Puisinya bagus...

 
 K: ...dari nol penggemar menjadi satu pengemar...

 M: ...tapi tak logis.

 K: ...dan semua penggemarku, yang cuma satu itu, bilang bagus.

 M: Yeah, tapi gak logis.

 K: Gakpapa, yang penting ada bagus-nya.

 M: Masak disini kamu tulis Daun jatuh tak membenci angin.  Lha jelas daun yang jatuh gara-gara angin itu kan daun tua yang kering, tentu saja pasrah saja dia tertiup angin.

 K: Puisi kan gak perlu logis to Meg.

 M: Ini bukan puisi penambah semangat.

 K: Memang bukan. Puisiku yang ini tentang pasrah setelah berusaha.

 M: Lha kalau gambarannya daun jatuh karena angin, berarti pasrah sampai tua dong.

 K: Eh, iya juga.

 M: Harusnya bikin yang menambah semangat atau tahan banting atau bertahan semacam Daun yang kuat takkan jatuh sekalipun badai.

 K: Wah, trims Meg, ide bagus buat bahan puisi baruku

 M: ... 

Wednesday, May 25, 2016

Bouncing Ball inside Sphere


from visual import *
from random import uniform

display(center=(0,2,0),background=(1,1,1), autoscale=False, range=4.5,        
        width=600, height=600,  forward=(-.4,-.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)

Ball    = sphere(radius=2, length=4, opacity=.3)


bola        = sphere(color=color.green,radius=.2)
bola.y      = 1
bola.x      = -1
bola.z      = 1

v           = vector(2,1,0)
dt          = 1./16
r           = bola.pos
rc          = Ball.radius

def pantul():
    global r,v
    if mag(r)>=rc:
        r   = 1.99*norm(r)
        vp  = (dot(v,norm(r)))*norm(r)
        vr  = v-vp
        v   = vr - vp

def proses():
    global r,v
    a   = vector(0,0,0)
    v   += a*dt
    r   += v*dt

    bola.pos  = r

    pantul()

while 1:
    rate(37)
    proses()


.


Tuesday, May 24, 2016

Bouncing inside Cylinder




from visual import *
from random import uniform

display(center=(0,2,0),background=(1,1,1), autoscale=False, range=4.5,        
        width=600, height=600,  forward=(-.4,-.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)

silinder    = cylinder(radius=2, length=4, opacity=.3)
silinder.rotate(angle=pi/2, axis=(0,0,1),origin=(0,0,0))


bola        = sphere(color=color.green,radius=.2)
bola.y      = 0
bola.x      = 0
bola.z      = 1

v           = vector(2,0,0)
dt          = 1./16
r           = bola.pos
rc          = silinder.radius

def pantul():
    global r,v
    if mag(r)>=rc:
        r   = 1.9*norm(r)
        vp  = (dot(v,norm(r)))*norm(r)
        vr  = v-vp
        v   = vr - vp

def proses():
    global r,v
    a   = vector(0,0,0)
    v   += a*dt
    r   += v*dt

    bola.pos  = r

    pantul()

while 1:
    rate(7)
    proses()

.

Dot Product

Thursday, May 12, 2016

Larantuka





Kembali








Pesta Dansa.


 Yuhu...,
 hentakkan kaki..
 dan kibaskan rambutmu...
 :D








Generasiku








 

Locked Out of Heaven






Satu






Kehadiranmu (Boomerang)


Pelangi



Gadis XTravaganza



Bounce Over Spherical Surface










#code
from visual import *
from random import uniform


display(center=(0,2,0),background=(1,1,1), autoscale=False, range=7.5,        
        width=600, height=600,  forward=(-.4,-.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)

ball        = sphere(radius=2, color=color.red, opacity = .5)
r2          = ball.radius
silinder    = cylinder(radius=2, length=4, opacity=.3)
silinder.rotate(angle=pi/2, axis=(0,0,1),origin=(0,0,0))


bola        = sphere(color=color.green,radius=.2)
bola.y      = 3
bola.x      = uniform(-1,1)
bola.z      = uniform(-1,1)


v           = vector(0,2,0)
dt          = 1./8.
r           = bola.pos

def pantul():
    global r,v
    print v
    if mag(r)<r2:
        print mag(r)
        arah    = norm(r)
        dv      = dot(v,arah)
        v       -= dv*arah
        r       = (r2+.2)*arah
    
    

def proses():
    global r,v
    a   = vector(0,-1,0)
    v   += a*dt
    r   += v*dt

    bola.pos  = r

    pantul()

    

while 1:
    rate(11)
    proses()


.




Tuesday, May 10, 2016

N-Spring System

 Using Visual Python

 I like the result, :)

#code
from visual import *

n       = 13
display(center=(n/2,0,0),background=(1,1,1), autoscale=False, range=(7),        
        width=600, height=600,  forward=(-.4,-.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.orange)
dt      = 1./8.
dx      = []
k       = []
m       = []
l0      = []
l       = []
v       = []
x       = []
for i in arange(n):
    dx.append(.1)
    k.append(1.)
    m.append(1.)
    l0.append(1.)
    l.append(1.)
    v.append(0.)
    x.append(0.)
pegas   = []
kotak   = []

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)

box(pos=(-1,.64,0), width=n, height=2, length= 2, color=color.black)
box(pos=(n/2.,-.36,0), width=n, height=.2, length= n, color=color.white,opacity=.9)

#usikan
l[0]        = 1.2 
l[n-1]      = .9
#posisi x
position    = 0
for i in arange(n):
    position    +=l[i]
    x[i]        = position
    kotak[i].x  = x[i]


def updatePegas():
    global l
    for i in arange(n):
        if i!=0:
            pegas[i].x  = x[i-1]
            l[i]        = x[i]-x[i-1]
        else:
            l[i]        = x[i]

        kotak[i].x      = x[i]
        pegas[i].length = l[i]
        
def proses():
    for i in arange(n):
        dx[i]   = l[i]-l0[i]
        f0      = -k[i]*dx[i]
        if i<n-1:
            dx[i+1] = l[i+1]-l0[i+1]
            f1      = -k[i+1]*dx[i+1]
            a       = (f0-f1)/m[i]
        else:
            a       = f0/m[i]
        v[i]    += a*dt
        x[i]    += v[i]*dt
    updatePegas()
while 1:
    rate (19)
    proses()

.

Monday, May 9, 2016

Here's the Culprit



 In Visual Python, helix object will generate error if helix.length = some array like the code below. I use dl, an array, for the length value
from visual import *

display(center=(1,0,0),background=(1,1,1), autoscale=False, range=(2,2,2),        
        width=600, height=600,  forward=(-.4,-.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)
n       = 1
dt      = 1./8.
dl      = ones(1)

pegas   = []

print dl


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)

def updatePegas(l):
    pegas[0].length = l
    
    

def proses():
    global dl
    l   = pegas[0].length
    if l>2:
        l   = 2
        dl[0]  *= -1
    elif l<.5:
        l   = .5
        dl[0]  *= -1
    l   += dl[0]
    updatePegas(l)
    
while 1:
    rate (19)
    proses()

    
    
    
    

    

.



And the result is
Traceback (most recent call last):
  File "springList.py", line 40, in 
    proses()
  File "springList.py", line 36, in proses
    updatePegas(l)
  File "springList.py", line 22, in updatePegas
    pegas[0].length = l
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/VPython-6.11-py2.7-macosx-10.6-intel.egg/visual_common/primitives.py", line 850, in set_length
    self.__frame.axis = self.__axis.norm()
AttributeError: 'numpy.ndarray' object has no attribute 'norm'


If we change dl from array to list, like the code below, everything is suddenly OK, :)
from visual import *

display(center=(1,0,0),background=(1,1,1), autoscale=False, range=(2,2,2),        
        width=600, height=600,  forward=(-.4,-.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)
n       = 1
dt      = 1./8.
#dl      = ones(1)
dl      = []
dl.append(.1)
pegas   = []

print dl


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)

def updatePegas(l):
    pegas[0].length = l
    
    

def proses():
    global dl
    l   = pegas[0].length
    if l>2:
        l   = 2
        dl[0]  *= -1
    elif l<.5:
        l   = .5
        dl[0]  *= -1
    l   += dl[0]
    updatePegas(l)
    
while 1:
    rate (19)
    proses()

    
    
    
    

    

.

Gonna rewrite the code.


Timeline of DID man

 

Bangun tidur - 6.30
Mode: Ayah
Main, mandikan Alfa Beta, ndulang kalo sempat, nyalakan mesin cuci kalo sempat

6.30- 800
Mode: Me
SubMode: Musisi/Gardener/Cook

Nggebuk drum, atau senam jari dengan gitar, atau melatih muscle memory di piano

atau

siram-siram tanaman di depan rumah, mindah-mindah benih ke tanah, menyortir rumput baik dan rumput jahat

atau

bereksperimen di dapur dengan berbagai macam resep online maupun buatan sendiri

atau

tidur

8.00-17.00
Mode: work
Ngampus

Sore-21.00
Mode: Ayah

Main-main sama Alfa Beta sampe tertidur

21.00-23.00
Mode: Couple

23.00-sleepy
Mode: Me
SubMode: programmer, arranger, novice writer

Bikin kode program, bikin aransemen musik kalau lagi mood, atau nge-mix track hasil rekaman tadi pagi, brainstorming tulisan apapun, atau menulis apapun, atau merekatkan hasil brainstorming hari-hari sebelumnya.

Sampai tertidur.

Sunday, May 8, 2016

Online Vote

 Praktis.

 Tentu saja jika digunakan untuk menentukan pemenang lomba akan jadi  aneh. 

 Bot soldier berpesta. 

Double Spring System

Akhirnya.

With Visual Python module

I couldn't use list for spring length since it'll trigger some error for helix object. It's very unfortunate because it would come handy as we expand the number of spring and mass.

Anyway, here's the code

#code
from visual import *
from random import uniform,random
from visual.controls import *

display(center=(1,0,0),background=(1,1,1), autoscale=False, range=(2,2,2),        
        width=600, height=600,  forward=(-.4,-.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)
n       = 2
dt      = 1./8.
pegas   = []
kotak   = []
box(pos=(-1,0,0), width=2, height=2, length= 2, color=color.black)
box(pos=(0,-.36,0), width=2, height=.2, length= 5, color=color.black,opacity=.3)
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.
k1      = 1.

m0      = 1.
m1      = 1.

l00     = 1.
l01     = 1.

l0      = 1.
l1      = 1.1

x0      = l0
x1      = l0+l1

v0      = 0.
v1      = 0.


y = 1.
print x1
def updatePegas():
    global x0,x1
    kotak[0].x      = x0
    pegas[0].length = l0
    
    kotak[1].x      = x1
    pegas[1].x      = l0
    pegas[1].length = l1

    

def proses():
    global l0,v0,x0,l1,v1,x1
    #untuk m0
    dx0     = l0-l00
    f0     = -k0*dx0
    dx1     = l1-l01
    f1     = -k1*dx1
    a0      = (f0-f1)/m0
    v0      += a0*dt
    x0      += v0*dt
    l0      = x0
    #untuk m1
    a1      = f1/m1
    v1      += a1*dt
    x1      += v1*dt
    l1      = x1-x0
    
    
    updatePegas()
    
while 1:
    rate (39)
    y   += .1
    proses()

    
    
    
    

    

.


Saturday, May 7, 2016

Tangkisan.


 Banyak yang sibuk menangkis tuduhan dengan menyerang balik. Atau dengan menghabiskan waktu menjawab dan mengklarifikasi segala macam tuduhan.

 Jarang  ada yang membuktikan dengan tindakan bahwa tuduhan itu tak benar.

 Lebih jarang lagi yang cuek, melanjutkan hidup, tanpa perlu membuktikan apapun.

 Padahal yang terakhir membutuhkan energi yang lebih sedikit.

 #Megatruh

Menyambut Bulan Puasa.

 Tentu saja menyiapkan kuota.

 Menyimpan sebanyak mungkin puisi bagus untuk di-paste di grup-grup media sosial.

 Menyusun draft untuk meminta maaf via sms atau messenger lain sehari sebelum puasa, terlepas bahwa minta maaf itu harusnya terjadi saat kita melakukan kesalahan, atau pas hari raya. Yang penting ikut trend.

 Oh iya, bisa juga buka-buka sms lama tahun lalu, cari yang bahasanya keren, jawa kuno, lucu, atau yang gak jelas sekalian. Diusahakan tahun ini dikirim kepada kontak baru atau yang tahun lalu belum pernah dapat.

 Ehm, sekarang kan juga banyak "gambar tulisan" tentang segala hal. Tentu saja besar kemungkinan ada "gambar tulisan" tentang awal puasa.

 Ohya, jangan lupa set reminder untuk sepuluh hari terakhir puasa. Itu musim "sharing" tulisan-tulisan tentang keutamaan berbagai macam kegiatan, yang biasanya di bawahnya ada catatan: "kirim ke limapuluh kenalan agar dijamin masuk surga minimal level 5".  Meskipun berat di bandwith dan kuota, tak ada salahnya ikut tren yang ini.

 Kemungkinannya kecil, tapi usahakan cari masjid yang ada akses wifi gratis, biar saat selfie di sana bisa langsung upload. Mungkin saja seratus posting pertama dengan hashtag #tarwih mendapat bonus poin pahala.

 Selamat bersiap-siap, :)

#edisiError
#Naya

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

    
    
    
    

    

.



Sharing


 Jadi ceritanya gini:

 Saya berangkat sekolah,

 trus diperkosa,

 trus dibunuh.

 The End.

 Mohon dicopy dan sebarluaskan ke medsos ya, :D

 #edisiError
 #Naya

Friday, May 6, 2016

One Blog a Day keep Doc Away

 :)

Spring.

 Bahan baru buat ide jahil besok, :)


#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=(3,5,3),        
        width=600, height=600,  forward=(-1.4,-1.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)
spring = helix(pos=(0,2,1), axis=(5,0,0), radius=0.5, color=color.red)

dl  = .1
l   = 1.
def proses():
    global l,dl
    spring.length = l
    if l>2:
        l   = 2
        dl  *= -1
    elif l<.5:
        l   = .5
        dl  *= -1
    l   += dl

while 1:
    rate (19)
    proses()
    
    
    
    

    

.





Piston Free Expansion Oscillation.

The result of daydreaming, :)

#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,7,7),        
        width=600, height=600,  forward=(0.4,-0.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)
cylinder(pos=(-4,0,0), axis=(7,0,0), radius=1, color=color.green, opacity=.1)
piston  = cylinder(pos=(-2,0,0), axis=(1,0,0), radius=.7, color=color.red)
piston1  = cylinder(pos=(-2,0,0), axis=(5,0,0), radius=.1, color=color.red)

p0  = 1.
A   = 1.
x0  = 5.        #panjang piston
c   = p0*A*x0
x   = 3
dx  = x0-x       #
m   = 1.
v   = 0.
dt  = 1./8.
def proses():
    global x,v,dx
    p   = c/x
    dp  = p-p0
    print x,dp
    f   = -dp
    a   = f/m
    v   += a*dt
    dx  += v*dt
    x   -= v*dt

    piston.x    = dx
    piston1.x    = dx
while 1:
    rate (19)
    proses()
    
    
    
    

   
.



Ball Oscillation Inside a Sphere

 with Visual Python.

 I use nonlinear solution, :)


#code
from visual import *
from random import uniform,random
from visual.controls import *

display(center=(0,0,0),background=(1,1,1), #autoscale=False,        
        width=600, height=600,  forward=(-0.4,-0.3,-1)) #arah kamera

distant_light(direction=(1,1,1), color=color.red)

dl  = .01
l   = 1.1

box(color=color.white, pos=(0,0,0),length=2*l,height=dl, width=dl, opacity=.3)
box(color=color.white, pos=(0,0,0),length=dl,height=2*l, width=dl, opacity=.3)
box(color=color.white, pos=(0,0,0),length=dl,height=dl, width=2*l, opacity=.3)


bola1 = sphere (pos=(0,0,0), radius=1.1, color=color.green, opacity=.3)
bola = sphere (pos=(1,0,0), radius=.1, color=color.red)

r   = 1.
x   = 1.
m   = 1.
g   = 1.
vx  = 0.
dt  = 1./16.
def proses():
    global x,vx
    f   = -m*g*x/r
    a   = f/m
    vx  += a*dt
    x   += vx*dt
    r2  = r*r
    x2  = x*x
    if x2>r2:
        x2 = r2
    y   = r-sqrt(r2-x2)
    bola.x  = x
    print x
    bola.y  = y-r
    
while 1:
    rate (19)
    proses()
    
    
    
    

    

.




Thursday, May 5, 2016

Cmaj9#11



Dibentuk dari akkord dasar C (C-E-G)

Tambahkan nada ke-tujuh yang dinaikkan setengah  untuk membentuk Cmaj7 (C-E-G-B)

Tambahkan nada ke-sembilan untuk membentuk akkord Cmaj9 (C-E-G-B-d)

Tambahkan nada ke-sebelas yang dinaikkan satu semitone, dan jadilah akkord Cmaj9#11 (C-E-G-B-d-f#)

Bagi saya, akkord ini lebih melayang dari maj7 atau maj9, tetapi lebih stabil daripada akkord 7, 9 atau 11 (tanpa maj) yang terasa "menggantung", :)