|
From: John B. <joh...@gm...> - 2010-01-09 14:05:14
|
I having difficulty in trying to display two windows one with
action/animation and the graph that relates to the action. I tried to put
together pieces from the documentation on graphs. I want to graph the time
by speed of the accelerated ball in the animated window. The code below does
succeed in running the animation and can display the graph window but I
cannot get the plotting function to display on the graphing window I
created. Does the curve need to be an argument with gdisplay at the
beginning but that isn't a clear parameter in the documentation. Within the
motion loop, I feel like there should be something like graph1 =
gdisplay(funct1) to relate the function to the graph window but it isn't
clear how to do this. What is the best and tidiest way to do this?
# Adapted from erik thompson video lesson 1.
from visual import *
from visual.text import *
from visual.graph import * # import graphing features
scene.width = 800
scene.height = 600
scene.autoscale = 0
scene.range = (100,100,100)
scene.center = (0,40,0)
scene.title = "Acceleration"
scene.fov = 0.001
#scene.range = 7 #sets the starting position view.
ball = sphere(pos=(100.0,0,0),radius=2)
ground = box(pos=(-1,0,0),size=(2,10,10))
initPos = ball.pos
acc = 9.8 # m/s**2
seconds = 0.0
dt = .01 #change in time
graph1 = gdisplay(x=0, y=600, width=600, height=500,
title='dt vs. dv', xtitle='change in time', ytitle='change in
speed',
xmax=30, xmin=0., ymax=25, ymin=0,
foreground=color.black, background=color.white) #
is gcurve an argument that should go in here
graph1 = gdisplay()
graph1.display.visible = 0 # make the display visible
finished = False
while not finished:
rate(100) # sets the general rate and speed of the computations
seconds += dt #increment time
distance = 0 + .5 * acc * seconds**2 #distance travelled
time = seconds
speed = distance / time
funct1 = gcurve(color=color.cyan)
graph1 = gdisplay(funct1) #I know this is wrong but how do I
place on graph1.
for time in arange(0.0, 30.0, 0.1): # time is a range that goes from
0 to 30 (in increments of 0.1).
funct1.plot(pos=(time,speed)) # plot a time by speed graph.
# position equation: y(t) = y0 + v0*t + .5 * a * t**2. So the position
of the ball at any given instance is...
ballTravel = 100.0 - .5 * acc * seconds**2
#new position
ball.pos = vector(ballTravel,0,0)
if ballTravel - 2 < 0: #try to stop at 1 on the platform
finished = True
print "seconds to fall: " + str(seconds) #print to the
display console.
|