forked from burakbayramli/books
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPyBounceKey.py
More file actions
133 lines (107 loc) · 2.64 KB
/
PyBounceKey.py
File metadata and controls
133 lines (107 loc) · 2.64 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# PyBounce.py
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from Numeric import *
import sys
# Set the width and height of the window
# delete dx and dy
global width, height, axrng, anim, x, y
# add hvel and vvel
global xborder, yborder, radius, hvel, vvel
#initial values
x = -0.67
y = 0.34
# delete dx = dy = 1
# add
hvel = vvel = 0.000
radius = 0.2
width = height = 500
axrng = 10.0
anim = 0
xborder = yborder = axrng
def init():
glClearColor(0.0, 0.0, 0.0, 1.0)
glColor3ub(255, 0, 0)
def idle():
if anim == 1:
glutPostRedisplay()
def plotfunc():
# remove dx and dy, add hvel, vvel
global x, y, hvel, vvel
glClear(GL_COLOR_BUFFER_BIT)
# change this to implement hvel and vvel
x = x + hvel
y = y + vvel
glPushMatrix()
glTranslate(x,y,0)
glutSolidSphere(radius, 50, 50)
#glScalef(0.5, 0.5, 0.5)
#glutSolidTeapot(radius)
glPopMatrix()
# change this to implement hvel and vvel
if x >= xborder-radius or x <= -xborder+radius:
hvel = -1*hvel
if y >= yborder-radius or y <= -yborder+radius:
vvel = -1*vvel
glutSwapBuffers()
def reshape( w, h):
global xborder, yborder
# To insure we don't have a zero height
if h==0:
h = 1
# Fill the entire graphics window!
glViewport(0, 0, w, h)
# Set the projection matrix... our "view"
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
# Set the aspect ratio of the plot so that it
# Always looks "OK" and never distorted.
if w <= h:
gluOrtho2D(-axrng, axrng, -axrng*h/w, axrng*h/w)
yborder = axrng*h/w
else:
gluOrtho2D(-axrng*w/h, axrng*w/h, -axrng, axrng)
xborder = axrng*w/h
# Set the matrix for the object we are drawing
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
def keyboard(key, x, y):
# Allows us to quit by pressing 'Esc' or 'q'
# We can animate by "a" and stop by "s"
global anim
if key == chr(27):
sys.exit()
if key == "a":
anim = 1
if key == "s":
anim = 0
if key == "q":
sys.exit()
# add this function
def specialkey(key , x, y):
global hvel, vvel
if key == GLUT_KEY_LEFT:
hvel -= 0.001
if key == GLUT_KEY_RIGHT:
hvel += 0.001
if key == GLUT_KEY_UP:
vvel += 0.001
if key == GLUT_KEY_DOWN:
vvel -= 0.001
def main():
global width, height
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE)
glutInitWindowPosition(100,100)
glutInitWindowSize(width,height)
glutCreateWindow("PyBounce")
glutReshapeFunc(reshape)
glutDisplayFunc(plotfunc)
glutKeyboardFunc(keyboard)
# add
glutSpecialFunc(specialkey)
glutIdleFunc(idle)
init()
glutMainLoop()
main()