用户:
豪爽的力士甲虫xWlZ查看:0 回复:1 评论:0 创建时间:2020-08-09T23:10:36
【作品展示】

【作品介绍】
通过简单的数学旋转矩阵计算和投影矩阵运算在2d平面上显示出三维立方体
【作品源代码】
import pygame
import math
pygame.init()
def projected3dto2d(distance,p3d):
z=1/(distance-p3d[2])
projection=[
[z,0,0],
[0,z,0]
]
projected=[0,0]
for i in range(2):
for j in range(2):
projected[i]+=projection[j][i]*p3d[j]
return projected
def rotateY(deg,p3d):
rotation=[
[math.cos(deg),0,-math.sin(deg)],
[0,1,0],
[math.sin(deg),0,math.cos(deg)]
]
rotated=[0,0,0]
for i in range(3):
for j in range(3):
rotated[i] += rotation[j][i]*p3d[j]
return rotated
pass
def draw(background,deg):
points=[
[100, 100, 100],
[-100, 100, 100],
[100, -100, 100],
[-100, -100, 100],
[100, 100, -100],
[-100, 100, -100],
[100, -100, -100],
[-100, -100, -100],
]
for c in points:
projected = projected3dto2d(512,rotateY(deg,c))
for c in range(2):
projected[c] = projected[c]*400
pygame.draw.circle(background, (255, 255, 255),(int(projected[0]+320), int(projected[1])+240), 10)
for c in range(4):
connect(points[c],points[c+4],deg,background)
connect(points[c*2],points[c*2+1],deg,background)
connect(points[0],points[2],deg,background)
connect(points[1],points[3],deg,background)
connect(points[4],points[6],deg,background)
connect(points[5],points[7],deg,background)
def connect(pa,pb,deg,background):
a=projected3dto2d(512,rotateY(deg,pa))
b=projected3dto2d(512,rotateY(deg,pb))
for c in range(2):
a[c]=a[c]*400
b[c]=b[c]*400
pygame.draw.line(background,(255,255,255),(a[0]+320,a[1]+240),(b[0]+320,b[1]+240),4)
def main():
degs=0
screen = pygame.display.set_mode((喵0, 480))
pygame.display.set_caption("3d cube By Zhao")
clock = pygame.time.Clock()
keepgoing=1
while keepgoing:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepgoing = 0
degs+=3.1415926/320
background = pygame.Surface(screen.get_size())
background = background.convert()
draw(background,degs)
screen.blit(background, (0, 0))
pygame.display.flip()
main()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn