Menu

[r6218]: / trunk / py4science / examples / skel / shoot_skel.py  Maximize  Restore  History

Download this file

91 lines (66 with data), 2.4 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/env python
"""Visual Python demo: shooting a falling object.
Note that this script can NOT be run inside ipython via the 'run' command.
You MUST run it from the command line as a standalone program. Start by doing
chmod +x shoot.py
(or whatever you called it), and then you can run it via
./shoot.py
"""
import time
import sys
# Visual is built on top of the 'old' Numeric, so do NOT use numpy here. We
# do a wholesale import for coding convenience, this is highly discouraged in
# larger codebases (but usually OK in very small demo scripts and interactive
# use).
from Numeric import *
import visual as V
# Geometric parameters (all in MKS units)
theta = pi/4 # initial angle of gun
D = 20 # width ...
H = 20 # height of floor
g = -9.8 # gravity
gun_len = 2 # size of gun
arrow_len = 4 # and of arrow
v0_default = 15 # default for initial velocity if not given
# Numerical simulation parameters
dt = 0.01
# Update for all velocities under constant acceleration (gravity)
dv = # XXX use V.vector to define the change in velocity vector. Think of the
# differential equation involved.
# Tolerance for deciding whether a collision happened
impact_distance = 0.5
# Initialize arguments
try:
v0 = float(sys.argv[1])
except:
v0 = v0_default
print 'Using default v0 =',v0,'m/s.'
# Build 3d world
# Define the line of sight
sight = # XXX - use V.vector...
# The floor is just a thin box of length/width D and height 0.5:
floor = V.box(pos=(D/2.,0,0), length=D, height=0.5, width=D, color=V.color.blue)
# XXX Use V.cone for our 'arrow'
arrow = # ...
# Set the arrow's .velocity attribute correctly:
arrow.velocity = # XXX
# The target is a sphere. Position it correctly...
target = # XXX
target.velocity = # XXX
# The 'dart gun' is just a cylinder
gun = V.cylinder(pos=(0,0,0), axis=gun_len*sight, radius=1,
color = V.color.green)
# Run simulation
print 'Starting simulation...'
# Put a little delay to give all the OpenGL stuff time to initialize nicely.
time.sleep(1)
while # XXX. What should the condition be? Objects have .y attributes for
# their y coordinate, and you can compute the magnitude of a vector using
# V.mag().
V.rate(75) # set the speed of the updates for visual convenience.
# Update the object positions...
# Report to user if there was a hit or not...
if # XXX
print 'Hit!'
else:
print 'Miss...'
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.