Advertisement
Guest User

masz

a guest
Dec 4th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.12 KB | None | 0 0
  1. import pygame, sys, math
  2. black = (0, 0, 0); white = (255, 255, 255); green = (0, 255, 0)
  3. blue = (0, 0, 255); red = (255, 0, 0)
  4. pygame.init()
  5. scr = pygame.display.set_mode((500, 500))
  6. win = scr.get_rect()
  7. scr.fill(white)
  8.  
  9. k = 0.5 # projection scale
  10. phi = math.radians(63.4) # try also 45
  11. sinphi = math.sin(phi); cosphi = math.cos(phi)
  12.  
  13. s = 100
  14. c = 50
  15. cube =(\
  16. (-s,-s,-s),(-s, s,-s),(-s, s,-s),( s, s,-s),\
  17. ( s, s,-s),( s,-s,-s),( s,-s,-s),(-s,-s,-s),\
  18. (-s,-s, s),(-s, s, s),(-s, s, s),( s, s, s),\
  19. ( s, s, s),( s,-s, s),( s,-s, s),(-s,-s, s),\
  20. (-s,-s,-s),(-s,-s, s),(-s, s,-s),(-s, s, s),\
  21. ( s, s,-s),( s, s, s),( s,-s,-s),( s,-s, s))
  22. #(-s,-s,-s),(-s,s,-s),(s,s,-s), (s, -s, -s)
  23.  
  24. tetrahedron=(\
  25. (s,s,s),(s,-s,-s),(-s,s,-s),(-s,-s,s),\
  26. (s,s,s),(-s,s,-s),(s,-s,-s),(-s,s,-s),\
  27. (s,s,s),(-s,-s,s),(s,-s,-s),(-s,-s,s))
  28.  
  29. tetrahedron2=(\
  30. (-c,-c,-c),(-c,c,c),(c,-c,c),(c,c,-c),\
  31. (-c,-c,-c),(c,-c,c),(-c,c,c),(c,-c,c),\
  32. (-c,-c,-c),(c,c,-c),(-c,c,c),(c,c,-c))
  33.  
  34. octahedron=((0,0,s),(0,s,0))
  35. '''
  36. (0,0,s),(0,s,0),\
  37. (0,0,s),(s,0,0),\
  38. (0,0,s),(-s,0,0),\
  39. (0,0,s),(0,-s,0),\
  40. (0,0,-s),(0,s,0),\
  41. (0,0,-s),(s,0,0),\
  42. (0,0,-s),(-s,0,0),\
  43. (0,0,-s),(0,-s,0),\
  44. (s,0,0), (0,s,0),\
  45. (-s,0,0), (0,s,0),\
  46. (s,0,0), (0,-s,0),\
  47. (-s,0,0), (0,-s,0))
  48. '''
  49.  
  50. def define(x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4):
  51.     global octahedron
  52.     octahedron = list(octahedron)
  53.  
  54.     octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2)); octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2))
  55.     octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2)); octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2))
  56.     octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2)); octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2))
  57.     octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2)); octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2))
  58.     octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2)); octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2))
  59.     octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2)); octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2))
  60.     octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2)); octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2))
  61.     octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2)); octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2))
  62.     octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2)); octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2))
  63.     octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2)); octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2))
  64.     octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2)); octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2))
  65.     octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2)); octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2))
  66.     octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2)); octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2))
  67.     octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2)); octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2))
  68.     octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2)); octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2))
  69.     octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2)); octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2))
  70.     octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2)); octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2))
  71.     octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2)); octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2))
  72.     octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2)); octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2))
  73.     octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2)); octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2))
  74.     octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2)); octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2))
  75.     octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2)); octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2))
  76.     octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2)); octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2))
  77.     octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2)); octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2))
  78.     octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2)); octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2))
  79.     octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2)); octahedron.append(((x1+x2)/2, (y1+y2)/2, (z1+z2)/2))
  80.     octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2)); octahedron.append(((x1+x3)/2, (y1+y3)/2, (z1+z3)/2))
  81.     octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2)); octahedron.append(((x1+x4)/2, (y1+y4)/2, (z1+z4)/2))
  82.     octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2)); octahedron.append(((x2+x3)/2, (y2+x3)/2, (z2+z3)/2))
  83.     octahedron.append(((x3+x4)/2, (y3+y3)/2, (x3+x4)/2)); octahedron.append(((x2+x4)/2, (y2+x4)/2, (z2+z4)/2))
  84.  
  85.     octahedron = tuple(octahedron)
  86.     #((x1+x2)/2, y1-y2, z1-z2), (x1-x3, y1-y3, z1-z3),(x1-x4, y1-y4, z1-z4),\
  87.     #(x2-x3, y2-x3, z2-z3), (x2-x4, y2-x4, z2-z4),(x3-x4, y3-y3, x3-x4)
  88.  
  89.     #(s,s,s),(s,-s,-s),(-s,s,-s),(-s,-s,s)
  90. define(-s,-s,-s,-s,s,-s,s,s,-s, s, -s, -s)
  91.  
  92. def drawline3d((x1,y1,z1),(x2,y2,z2),colour, w=1):
  93.     # convert 3d to 2d with cabinet projection
  94.     xa = x1 - z1*sinphi *k
  95.     ya = y1 - z1*cosphi *k
  96.     xb = x2 - z2*sinphi *k
  97.     yb = y2 - z2*cosphi *k
  98.     # convert to screen coordinates
  99.     s1, s2 = (win.centerx+xa,win.centery-ya), (win.centerx+xb,win.centery-yb)
  100.     pygame.draw.line(scr, colour, s1, s2, w)
  101. def draw3d(figure, colour): #read pairas of 3d-points
  102.     pair=False  
  103.     for x2,y2,z2 in figure:
  104.         if not(pair):
  105.             x1,y1,z1 = x2,y2,z2
  106.             pair = True; continue
  107.         drawline3d((x1,y1,z1),(x2,y2,z2), colour)
  108.         pair = False
  109.  
  110. def rotx(fig,a):
  111.     newfig = []
  112.     a = math.radians(a)
  113.     sin=math.sin(a); cos=math.cos(a)
  114.     for x,y,z in fig:
  115.         newfig.append((x,y*cos-z*sin,y*sin+z*cos))
  116.     return newfig
  117. def roty(fig,a):
  118.     newfig = []
  119.     a = math.radians(a)
  120.     sin=math.sin(a); cos=math.cos(a)
  121.     for x,y,z in fig:
  122.         newfig.append((x*cos+z*sin,y,-x*sin+z*cos))
  123.     return newfig
  124. def rotz(fig,a):
  125.     newfig = []
  126.     a = math.radians(a)
  127.     sin=math.sin(a); cos=math.cos(a)
  128.     for x,y,z in fig:
  129.         newfig.append((x*cos-y*sin,x*sin+y*cos,z))
  130.     return newfig
  131.  
  132. pygame.key.set_repeat(50,50)
  133. while True:
  134.     for event in pygame.event.get():
  135.         if event.type == pygame.QUIT:
  136.             sys.exit()
  137.         if event.type == pygame.KEYDOWN:
  138.             if event.key == pygame.K_DOWN:
  139.                 cube = rotx(cube,5)
  140.                 tetrahedron = rotx(tetrahedron,5)
  141.                 tetrahedron2 = rotx(tetrahedron2,5)
  142.                 octahedron= rotx(octahedron,5)
  143.             if event.key == pygame.K_RIGHT:
  144.                 cube = roty(cube,5)
  145.                 tetrahedron = roty(tetrahedron,5)
  146.                 tetrahedron2 = roty(tetrahedron2,5)
  147.                 octahedron= roty(octahedron,5)
  148.             if event.key == pygame.K_a:
  149.                 tetrahedron2 = rotz(tetrahedron2,5)
  150.                 tetrahedron = rotz(tetrahedron,5)
  151.                 octahedron= rotz(octahedron,5)
  152.                 cube = rotz(cube,5)
  153.     scr.fill(black)
  154.     draw3d(tetrahedron, red)
  155.  
  156.     draw3d(octahedron, blue)
  157.     #draw3d(tetrahedron2)
  158.     #draw3d(cube, green)
  159.     pygame.display.flip()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement