Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- from pygame.locals import *
- from OpenGL.GL import *
- from OpenGL.GLU import *
- import math
- import os
- import numpy as np
- size = 30
- speed = 500
- amplitude_amplificator = 80
- color_table = ((1,0,0),
- (0,1,0),
- (0,0,1),
- (1,1,0),
- (1,0,1),
- (0,1,1),
- (1,0.5,0),
- (0.5,1,0),
- (0.5,1,0.5),
- (0,0.5,0)
- )
- locations = ((0,-975, 0),
- (0, 975, 0),
- (-1273,-975, 0),
- (-1273, 975, 0),
- (-2482, -975, 0),
- (-2482, 975, 0),
- (-3737, -975, 0),
- (-3737, 975, 0)
- )
- lines = ((0,2),
- (2, 4),
- (4, 6),
- (1, 3),
- (3, 5),
- (5, 7),
- (0, 1),
- (2, 3),
- (4, 5),
- (6, 7),
- )
- amplitudes = ((3.38829249165602, 2.38305866657961, 2.52151563664636),
- (5.08487438107113, 2.36432294667884, 3.0843991148654),
- (3.44312569856563, 1.23112415468012, 1.29869765112226),
- (4.0421066637935, 1.40655294535107, 1.36083778879317),
- (3.78074337117764, 0.648255908566916, 0.752239154016233),
- (5.08887133464996, 0.607037324785205, 0.543523234321567),
- (4.49095206021647, 0.432732677308301, 2.18289872563964),
- (5.14707697114171, 0.335119576625248, 2.15666871777855)
- )
- phases = ((-146.873017352057,0,-95.316526141321),
- (-149.008372080797, 5.24886681104675, 78.3075732082314),
- (-148.241584335287, 5.54327579087787, -118.279685417256),
- (-151.844141596427, 6.48705235395368, -113.246406750217),
- (-148.14233553496, 27.9523171503408, 65.8254568277543),
- (-157.058723259828, 38.8760924034639, 85.2339573112435),
- (-153.417593784393, -120.329988461629, 16.0421535833842),
- (-156.779107376825, 83.2350395893582, 10.7592173681729)
- )
- # DRAW CUBE
- def Cube(po,si,co):
- POS = (
- (po[0]+si, po[1]-si, po[2]-si),
- (po[0]+si, po[1]+si, po[2]-si),
- (po[0]-si, po[1]+si, po[2]-si),
- (po[0]-si, po[1]-si, po[2]-si),
- (po[0]+si, po[1]-si, po[2]+si),
- (po[0]+si, po[1]+si, po[2]+si),
- (po[0]-si, po[1]-si, po[2]+si),
- (po[0]-si, po[1]+si, po[2]+si)
- )
- edges = (
- (0,1),
- (0,3),
- (0,4),
- (2,1),
- (2,3),
- (2,7),
- (6,3),
- (6,4),
- (6,7),
- (5,1),
- (5,4),
- (5,7)
- )
- glBegin(GL_LINES)
- for edge in edges:
- for vertex in edge:
- glColor3f(co[0],co[1],co[2])
- glVertex3fv(POS[vertex])
- glEnd()
- #DRAW ORIGINAL SHAPE IN LINES
- def Line_orig(po):
- glBegin(GL_LINES)
- for edge in po:
- for vertex in edge:
- glVertex3fv(locations[vertex])
- glEnd()
- #Hemisphere mapping
- def map_hemisphere(x,y):
- z = math.sqrt(abs(1-math.pow(x,2)-math.pow(y,2)))
- return z
- # Calculate angle of two spatial vectors
- def angle_calculation(a,b):
- r = math.degrees(math.acos((np.dot(a, b))/(np.linalg.norm(a)*np.linalg.norm(b))))
- return r
- def main():
- mouse_pressed = 0
- pygame.init()
- display = (1200,800)
- pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
- gluPerspective(45, (display[0]/display[1]), 0.1, 30000.0)
- glTranslatef(0,0.0,-10000)
- #glRotatef(90, 1, 0, 0)
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- quit()
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
- time = pygame.time.get_ticks()/1000
- norm_mouse_pos = (2*pygame.mouse.get_pos()[0]/display[0]-1,2*pygame.mouse.get_pos()[1]/display[1]-1,map_hemisphere(2*pygame.mouse.get_pos()[0]/display[0]-1,2*pygame.mouse.get_pos()[1]/display[1]-1))
- if pygame.mouse.get_pressed()[0]==1:
- if mouse_pressed == 0:
- mouse_pressed = 1
- clear = lambda: os.system('cls')
- clear()
- p1 = (norm_mouse_pos[0],norm_mouse_pos[1],map_hemisphere(norm_mouse_pos[0],norm_mouse_pos[1]))
- print(p1)
- else:
- p2 = (norm_mouse_pos[0],norm_mouse_pos[1],map_hemisphere(norm_mouse_pos[0],norm_mouse_pos[1]))
- cist = np.cross(p1, p2)
- print(angle_calculation(p1,p2))
- glRotatef( angle_calculation(p1,p2) , -cist[0] , cist[1] , cist[2] )
- else:
- mouse_pressed = 0
- # Translation of the model via keyboard handling
- keys=pygame.key.get_pressed()
- if keys[K_w]:
- glTranslatef(0, 100, 0)
- if keys[K_s]:
- glTranslatef(0, -100, 0)
- if keys[K_a]:
- glTranslatef(-100, 0, 0)
- if keys[K_d]:
- glTranslatef(100, 0, 0)
- # Drawing the Cubes at Nodes Loactions
- for item, el in enumerate(locations):
- Cube((el[0] + amplitudes[item][0]*math.sin(time + phases[item][0]*(3.1415927/180))*amplitude_amplificator,
- el[1] + amplitudes[item][1]*math.sin(time + phases[item][1]*(3.1415927/180))*amplitude_amplificator,
- el[2] + amplitudes[item][2]*math.sin(time + phases[item][2]*(3.1415927/180))*amplitude_amplificator
- ), size, color_table[item])
- # Drawing the Original Shapes (Specified nodes in Lines Tuple)
- Line_orig(lines)
- # Drawing the Deformed Shape
- glBegin(GL_LINES)
- for edge in lines:
- for vertex in edge:
- glVertex3fv((locations[vertex][0] + amplitudes[vertex][0]*math.sin(time + phases[vertex][0]*(3.1415927/180))*amplitude_amplificator,
- locations[vertex][1] + amplitudes[vertex][1]*math.sin(time + phases[vertex][1]*(3.1415927/180))*amplitude_amplificator ,
- locations[vertex][2] + amplitudes[vertex][2]*math.sin(time + phases[vertex][2]*(3.1415927/180))*amplitude_amplificator,
- ))
- glEnd()
- # OpenGL Management
- pygame.display.flip()
- pygame.time.wait(10)
- main()
Add Comment
Please, Sign In to add comment