-
Notifications
You must be signed in to change notification settings - Fork 0
/
Lab_6_2DTransform.py
116 lines (91 loc) · 2.56 KB
/
Lab_6_2DTransform.py
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
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
import math
points = [[20, 20], [20, 40], [40, 40]]
print('Select \n1. Translate \n2. Rotate \n3. Scale')
select = int(input('Enter your selection: '))
print('\n')
def matrixMultiply(A, B):
prod = list()
for i in range(3):
sm = 0
for j in range(3):
sm += A[i][j] * B[j][0]
prod.append(sm)
return prod[:2]
def translate():
translated = list()
translate_mat = [[1, 0, tx],
[0, 1, ty],
[0, 0, 1]]
for point in points:
point_mat = [[point[0]], [point[1]], [1]]
translated.append(matrixMultiply(translate_mat, point_mat))
points.extend(translated)
def rotate():
translated = list()
theta_rad = math.radians(theta)
rotate_mat = [[math.cos(theta_rad), -math.sin(theta_rad), 0],
[math.sin(theta_rad), math.cos(theta_rad), 0],
[0, 0, 1]]
for point in points:
point_mat = [[point[0]], [point[1]], [1]]
translated.append(matrixMultiply(rotate_mat, point_mat))
points.extend(translated)
def scale():
translated = list()
scale_mat = [[sx, 0, 0],
[0, sy, 0],
[0, 0, 1]]
for point in points:
point_mat = [[point[0]], [point[1]], [1]]
translated.append(matrixMultiply(scale_mat, point_mat))
points.extend(translated)
if select == 1:
tx = int(input('Enter tx: '))
ty = int(input('Enter ty: '))
translate()
elif select == 2:
xc = int(input('Enter xc: '))
yc = int(input('Enter yc: '))
theta = int(input('Enter angle of rotation: '))
rotate()
elif select == 3:
sx = int(input('Enter sx: '))
sy = int(input('Enter sy: '))
sz = int(input('Enter sz: '))
scale()
def drawAxes():
glBegin(GL_LINES)
glVertex2i(1, 0)
glVertex2i(-1, 0)
glVertex2i(0, 1)
glVertex2i(0, -1)
glEnd()
def calcDiv():
div = 0
for point in points:
div = max(div, point[0], point[1])
return div * 1.05
def drawPolygon():
drawAxes()
div = calcDiv()
count = 0
glBegin(GL_TRIANGLES)
for point in points:
glVertex2f(point[0] / div, point[1] / div)
count += 1
glEnd()
glutSwapBuffers()
def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE)
glutInitWindowSize(500, 500)
glutInitWindowPosition(350, 150)
glutCreateWindow(b'2D Transformations')
glutDisplayFunc(drawPolygon)
glutMainLoop()
if __name__ == '__main__':
main()