## 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

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