Thursday, June 2, 2016

Collision.





 Here's the Code
#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)

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

Bola    = []
n       = 5
for i in arange (n):
    bola        = sphere(color=color.green,radius=uniform(.2,.73))
    bola.pos    = vector(uniform(-1.5,1.5),uniform(-1.5,1.5),uniform(-1.5,1.5))
    bola.v      = vector(uniform(-1,1),uniform(-1,1),uniform(-1,1))
    Bola.append(bola)
    
dt          = 1./16

def pantul():
    global Bola
    for bola in Bola:
        r   = bola.pos
        v   = bola.v
        if mag(r)>=Ball.radius:
            r   = 1.9*norm(r)
            vp  = (dot(v,norm(r)))*norm(r)
            vr  = v-vp
            v   = vr - vp
            bola.r  = r
            bola.v  = v
    for i in arange (n-1):
        for j in range(i+1, n):
            ri  = Bola[i].pos
            rj  = Bola[j].pos
            vi  = Bola[i].v
            vj  = Bola[j].v
            rc  = rj-ri
            if Bola[i].radius+Bola[j].radius>mag(rc):
                vpi = dot(vi,norm(rc))*norm(rc)
                vri = vi-vpi
                vpj = -dot(vj,norm(rc))*norm(rc)
                vrj = vj-vpj

                vi  = vpj+vri
                vj  = vpi+vrj

                Bola[i].v   = vi
                Bola[i].v   = vj

def proses():
    for bola in Bola:
        r   = bola.pos
        v   = bola.v
        a   = vector(0,0,0)
        v   += a*dt
        r   += v*dt

        bola.pos  = r

    pantul()

while 1:
    rate(37)
    proses()

.