程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

micropython制作的旋轉立方塊,ssd1306顯示

編輯:Python

以前單片機經常看到有顯示旋轉立方塊的,但都是arduino,找了一圈經常沒發現有Mpy的,也可能是我搜的關鍵詞不對,管他呢,自己移植一個,用到的知識有矩陣計算、3d物品在2d平面的投影等,也是一知半解,主要程序移植對了就行,不多說了,上代碼

from math import cos,sin,pi
from machine import SoftI2C,Pin
from ssd1306 import SSD1306_I2C
cube=[[-15,-15,-15],[-15,15,-15],[15,15,-15],[15,-15,-15],[-15,-15,15],[-15,15,15],[15,15,15],[15,-15,15]]
lineid=[1,2,2,3,3,4,4,1,5,6,6,7,7,8,8,5,8,4,7,3,6,2,5,1]
i2c=SoftI2C(scl=Pin(44),sda=Pin(43))
oled=SSD1306_I2C(128, 64,i2c,addr=0x3c)
oled.fill(0)
def matconv(a,matrix):
res=[0,0,0]
for i in range(0,3):
res[i]=matrix[i][0]*a[0]+matrix[i][1]*a[1]+matrix[i][2]*a[2]
for i in range(0,3):
a[i]=res[i]
return a
def rotate(obj,x,y,z):
x=x/pi
y=y/pi
z=z/pi
rz=[[cos(z),-sin(z),0],[sin(z),cos(z),0],[0,0,1]]
ry=[[1,0,0],[0,cos(y),-sin(y)],[0,sin(y),cos(y)]]
rx=[[cos(x),0,sin(x)],[0,1,0],[-sin(x),0,cos(x)]]
matconv(matconv(matconv(obj,rz),ry),rx)
def drawcube(x,y,z):
oled.fill(0)
for i in range(0,8):
rotate(cube[i],x,y,z)
for i in range(0,24,2):
x1=int(64+cube[lineid[i]-1][0])
y1=int(32+cube[lineid[i]-1][1])
x2=int(64+cube[lineid[i+1]-1][0])
y2=int(32+cube[lineid[i+1]-1][1])
oled.line(x1,y1,x2,y2,1)
#print(64+cube[lineid[i]-1][0],32+cube[lineid[i]-1][1],64+cube[lineid[i+1]-1][0],32+cube[lineid[i+1]-1][1])
oled.show()
while 1:
drawcube(0.1,0.2,0.3)

轉起來!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved