logo
Published on Models of Motion (http://www2.evergreen.edu/modelsofmotion)

CS Lab Week 6

1.  Graph.. find the area between curves:

 

2.  Graphical Tools

 

3.  Mastermind:  Find Code

 

4.  2 D Collisions

 

5.  Project

Color Click:

from visual import *

ball=sphere(color=color.red)
bcolors = ["100","010","001","110","101","011"]
cpos=0
while 1:
    if scene.mouse.clicked:

        m = scene.mouse.getclick()
      
        if (m.pos.x<ball.pos.x+.5) and (m.pos.x>ball.pos.x-.5) and (m.pos.y>ball.pos.y-.5) and (m.pos.y<ball.pos.y+.5):
            ball.color = (int(bcolors[cpos][0]),int(bcolors[cpos][1]),int(bcolors[cpos][2]))
            cpos=cpos+1
            if cpos==6: cpos=0

 

Color Click Pos

from visual import *
c1 = scene.mouse.getclick()
earth = sphere(pos=(c1.pos.x,c1.pos.y,0),color=color.blue)
c1 = scene.mouse.getclick()
venus = sphere(pos=(c1.pos.x,c1.pos.y,0),color=color.green)
c1 = scene.mouse.getclick()
mars = sphere(pos=(c1.pos.x,c1.pos.y,0),color=color.red)

print "blue to green dist =",mag(earth.pos-venus.pos)
print "green to red",mag(venus.pos-mars.pos)
print "blue to red" ,mag(earth.pos-mars.pos)

Graphing:

from visual.graph import *
from visual.factorial import factorial
 
xmax = input("enter domain range")
xmin = -xmax
 
myfunction = raw_input("enter function ")
myderivative = raw_input("enter the derivative")
 
#define a function to approximate and enter its derivative
def f(x): return eval(myfunction)
def g(x): return eval(myderivative)
 
dx = (xmax-xmin)/512.0 # chop domain into 512 deltas
graph = gdisplay(ymin=xmin, ymax=xmax,xtitle=myfunction)
 
curve = gcurve(color=color.yellow)
curve2 = gcurve(color=color.red)
 
#draw the function itself
for x in arange(xmin,xmax,dx): curve.plot(pos=(x,f(x)))
for x in arange(xmin,xmax,dx): curve2.plot(pos=(x,g(x)))

 

from visual.graph import *
from visual.factorial import factorial
 
xmax = input("enter domain range")
xmin = -xmax
 
myfunction = raw_input("enter function ")

def f(x): return eval(myfunction)
 
dx = (xmax-xmin)/512.0 # chop domain into 512 deltas
graph = gdisplay(ymin=xmin, ymax=xmax,xtitle=myfunction)
 
curve = gcurve(color=color.yellow)

area=0.0
#draw the function itself
for x in arange(xmin,xmax,dx):
    curve.plot(pos=(x,f(x)))
 
#draw the area under the curve between 0 and 2:  add area of each bar
funct2 = gvbars(color=color.red,delta=dx)
rate(2)
for x in arange(0,2,dx):
    funct2.plot(pos=(x,f(x)))
    area=area+dx*f(x)

print area

 

2D Collision

from visual import *

scene.width=900
scene.height=600
scene.autoscale=0
ball = sphere(pos=(-9,0,0), color=color.blue,radius=.75)
ball2 = sphere(pos=(2,1.3,0), color=color.red,radius=.75)


while 1:
    mass = input("enter mass of the left ball")
    mass2= input("enter the mass of the right ball")
    mass=float(mass)
    mass2=float(mass2)
    mg = input("input the velocity of the ball")
    mg=float(mg)
   
    ball.velocity = vector(mg,0,0)
    ball2.velocity = vector(-1,0,0)
    d=.001
    dist = vector(ball.pos-ball2.pos)

    while 1:
        rate(100)
        if mag(dist)<=1.5:
   
            normvec=norm(dist)
          
            normtan=vector(-normvec.y,normvec.x,0)
            v1norm= dot(normvec,ball.velocity)
            v1tang = dot(normtan,ball.velocity)
            v2norm= dot(normvec,ball2.velocity)
            v2tang = dot(normtan,ball2.velocity)
           
            v1fnorm = (v1norm * (mass-mass2)+2*mass2*v2norm)/mass+mass2
            v2fnorm = (v2norm * (mass2-mass)+2*mass*v1norm)/mass+mass2
            v1fnorm = v1fnorm*normvec
            v1tang = v1tang*normtan
            v2fnorm=v2fnorm*normvec
            v2tang=v2tang*normtan
            ball.velocity=v1fnorm+v1tang
            ball2.velocity=v2fnorm+v2tang

        ball.pos=ball.pos+ball.velocity*d
        ball2.pos=ball2.pos+ball2.velocity*d
        dist = ball.pos-ball2.pos
       
        if ball.pos.x>10 or ball.pos.x<-10:
            ball.velocity.x=-ball.velocity.x
        if ball.pos.y>6 or ball.pos.y<-6:
            ball.velocity.y=-ball.velocity.y
            ball.pos = ball.pos + ball.velocity*d
     
        if ball2.pos.x>10 or ball2.pos.x<-10:
            ball2.velocity.x=-ball2.velocity.x
        if ball2.pos.y>6 or ball2.pos.y<-6:
            ball2.velocity.y=-ball2.velocity.y

        print mag(ball.velocity)*mass-mag(ball2.velocity)*mass2

 

 


Source URL:
http://www2.evergreen.edu/modelsofmotion/modelsofmotion/cs-lab-week-6