Script de manipulation 3D fait à partir de de la demo 3D de squarepoint
Utilisez les flèches. Et si possible Omega en logiciel de calculette.
from math import cos,sin,pi from kandinsky import * from time import sleep from ion import * MODEL=[] COLORS=[(255,0,0),(255,255,0),(0,255,0),(0,255,255),(0,0,255),(255,0,255)] def cube3d(x1,y1,z1,x2,y2,z2): line3d(x1,y1,z1,x1,y2,z1) line3d(x1,y1,z1,x2,y1,z1) line3d(x2,y1,z1,x2,y2,z1) line3d(x1,y2,z1,x2,y2,z1) line3d(x1,y1,z2,x1,y2,z2) line3d(x1,y1,z2,x2,y1,z2) line3d(x2,y1,z2,x2,y2,z2) line3d(x1,y2,z2,x2,y2,z2) line3d(x1,y1,z1,x1,y1,z2) line3d(x2,y1,z1,x2,y1,z2) line3d(x1,y2,z1,x1,y2,z2) line3d(x2,y2,z1,x2,y2,z2) def line3d(x1,y1,z1,x2,y2,z2): point3d(x1,y1,z1) point3d(x2,y2,z2) def point3d(x,y,z): MODEL.append([x,y,z]) def line(x1,y1,x2,y2,c): w=x2-x1 h=y2-y1 if abs(w)>=abs(h): d=h/w for i in range(0,w,(w>0)*2-1): set_pixel(x1+i,y1+int(d*i+0.5),c) else: d=w/h for i in range(0,h,(h>0)*2-1): set_pixel(x1+int(d*i+0.5),y1+i,c) try: line=draw_line except: pass def render(cosx,sinx,cosy,siny,cosz,sinz): fill_rect(0,0,320,200,(0,0,0)) for i in range(0,len(MODEL),2): x1,y1,z1=MODEL[i] x2,y2,z2=MODEL[i+1] #Rotations y1,z1=yturn(y1,z1,cosx,sinx) y2,z2=yturn(y2,z2,cosx,sinx) x1,z1=yturn(x1,z1,cosy,siny) x2,z2=yturn(x2,z2,cosy,siny) x1,y1=zturn(x1,y1,cosz,sinz) x2,y2=zturn(x2,y2,cosz,sinz) #Projections px1=int(x1*100/(z1+300)) py1=int(y1*100/(z1+300)) px2=int(x2*100/(z2+300)) py2=int(y2*100/(z2+300)) line(px1+160,py1+100,px2+160,py2+100,COLORS[i//2%6]) # ??? def xturn(y,z,cosx,sinx): return y*cosx-z*sinx,y*sinx+z*cosx def yturn(x,z,cosy,siny): return z*siny+x*cosy,z*cosy-x*siny def zturn(x,y,cosz,sinz): return x*cosz-y*sinz,x*sinz+y*cosz cube3d(-100,-100,-100,100,100,100) xrot=0 yrot=0 zrot=0 fill_rect(0,0,320,222,(0,)*3) draw_string("Full engine coming soon...",30,202,(255,255,255),(0,0,0)) while True: xrot+=pi/90*(keydown(KEY_UP)-keydown(KEY_DOWN)) yrot+=pi/90*(keydown(KEY_LEFT)-keydown(KEY_RIGHT)) # wait_vblank() render(cos(xrot),sin(xrot),cos(yrot),sin(yrot),cos(zrot),sin(zrot)) sleep(0.01)