May
29
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 ke
#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 ke