Tuesday, March 30, 2010

Strizich_VPython_Mobile



from __future__ import division
from visual import *
from visual.controls import *
from visual.graph import *

scene.width=1000
scene.height=400

folcrum=cone(pos=(0,-2.5,0), axis=(0,2,0), radius=1, color=color.green)
#floor = box(pos=(0,-2.5,0), length = 25, height = 0.25, width = 7, color = color.cyan)


device = frame()

ball1 = sphere(frame = device, pos = (-10,0,0), radius = 0.5, color = color.red)
ball2 = sphere(frame = device, pos = (-7.5,0,0), radius = 0.5, color = color.red)
ball3 = sphere(frame = device, pos = (-5,0,0), radius = 0.5, color = color.red)
ball4 = sphere(frame = device, pos = (-2.5,0,0), radius = 0.5, color = color.red)

ball5 = sphere(frame = device, pos = (0,0,0), radius = 0.5, color = color.red)

ball6 = sphere(frame = device, pos = (+2.5,0,0), radius = 0.5, color = color.red)
ball7 = sphere(frame = device, pos = (+5,0,0), radius = 0.5, color = color.red)
ball8 = sphere(frame = device, pos = (+7.5,0,0), radius = 0.5, color = color.red)
ball9 = sphere(frame = device, pos = (+10,0,0), radius = 0.5, color = color.red)

rod = box(frame = device, length = 20, height = 0.25, width = 0.25, color = color.blue) #We'll consider these
#dimensions to be in meters

def world_space_pos(frame, local): #To get the pos in "world space" of balls

x_axis = norm(frame.axis)
z_axis = norm(cross(frame.axis, frame.up))
y_axis = norm(cross(z_axis, x_axis))
return frame.pos+local.x*x_axis+local.y*y_axis+local.z*z_axis


rod.mass=660# Used desity of Oregon Pine Wood...530 kg/m^3...to get masses

omega=0

normalForce=0

ballMass=270
massScale=0.5

ball1.mass=massScale*ballMass
ball2.mass=massScale*ballMass
ball3.mass=massScale*ballMass
ball4.mass=massScale*ballMass

ball6.mass=massScale*ballMass
ball7.mass=massScale*ballMass
ball8.mass=massScale*ballMass
ball9.mass=massScale*ballMass



c = controls(x=0, y=400, width=1000, height=200)
slide1=slider( pos=(-66,-15), width=4, length=30, min=0.0, max=1.0, axis=(0,1,0))
slide2=slider( pos=(-50,-15), width=4, length=30, min=0.0, max=1.0, axis=(0,1,0))
slide3=slider( pos=(-34,-15), width=4, length=30, min=0.0, max=1.0, axis=(0,1,0))
slide4=slider( pos=(-18,-15), width=4, length=30, min=0.0, max=1.0, axis=(0,1,0))

slide6=slider( pos=(18,-15), width=4, length=30, min=0.0, max=1.0, axis=(0,1,0))
slide7=slider( pos=(34,-15), width=4, length=30, min=0.0, max=1.0, axis=(0,1,0))
slide8=slider( pos=(50,-15), width=4, length=30, min=0.0, max=1.0, axis=(0,1,0))
slide9=slider( pos=(66,-15), width=4, length=30, min=0.0, max=1.0, axis=(0,1,0))


slide1.value=massScale
slide2.value=massScale
slide3.value=massScale
slide4.value=massScale

slide6.value=massScale
slide7.value=massScale
slide8.value=massScale
slide9.value=massScale


while 1:
rate (100)
c.interact()

ball1.mass=slide1.value*ballMass
ball2.mass=slide2.value*ballMass
ball3.mass=slide3.value*ballMass
ball4.mass=slide4.value*ballMass

ball6.mass=slide6.value*ballMass
ball7.mass=slide7.value*ballMass
ball8.mass=slide8.value*ballMass
ball9.mass=slide9.value*ballMass

g=9.8

ball1.torque=ball1.mass*world_space_pos(device, ball1).x*g
ball2.torque=ball2.mass*world_space_pos(device, ball2).x*g
ball3.torque=ball3.mass*world_space_pos(device, ball3).x*g
ball4.torque=ball4.mass*world_space_pos(device, ball4).x*g

ball6.torque=ball6.mass*world_space_pos(device, ball6).x*g
ball7.torque=ball7.mass*world_space_pos(device, ball7).x*g
ball8.torque=ball8.mass*world_space_pos(device, ball8).x*g
ball9.torque=ball9.mass*world_space_pos(device, ball9).x*g

torqueNet=ball1.torque+ball2.torque+ball3.torque+ball4.torque+ball6.torque+ball7.torque+ball8.torque+ball9.torque-normalForce

Ipivot=((20*20)*(rod.mass))/12

alpha=torqueNet/Ipivot

omega=omega+alpha*0.01

theta=-omega*0.01

device.rotate(angle=theta, axis=(0,0,1), origin=(0,0,0))

No comments:

Post a Comment