Transférer les fichiers vers ''

This commit is contained in:
mibi88 2022-12-06 22:42:36 +01:00
parent d14ce973fb
commit 2bae3740c4
5 changed files with 423 additions and 0 deletions

59
line.py Normal file
View File

@ -0,0 +1,59 @@
from casioplot import *
def line(pos1,pos2):
x1=int(pos1[0])
y1=int(pos1[1])
x2=int(pos2[0])
y2=int(pos2[1])
"""if x2>x1:
tmp=x1
x1=x2
x2=tmp
del tmp
if y2>y1:
tmp=y1
y1=y2
y2=tmp
del tmp
dx=x1-x2
dy=y1-y2
if dx<dy:
e=dx/dy
d=x2
for i in range(y2,y1):
set_pixel(int(d),i)
d+=e
else:
e=dy/dx
d=y2
for i in range(x2,x1):
set_pixel(i,int(d))
d+=e"""
dx=abs(x2-x1)
sx=x1<x2
if sx==True:
sx=1
else:
sx=-1
dy=-abs(y2-y1)
sy=y1<y2
if sy==True:
sy=1
else:
sy=-1
error=dx+dy
while True:
set_pixel(x1,y1)
if x1==x2 and y1==y2:
break
e2=2*error
if e2>=dy:
if x1==x2:
break
error=error+dy
x1+=sx
if e2<=dx:
if y1==y2:
break
error=error+dx
y1+=sy

89
main.py Normal file
View File

@ -0,0 +1,89 @@
# 3D cube
# by mibi88
from line import *
import math
#width(3)
# unsed some code from https://www.mfitzp.com/creating-a-3d-rotating-cube-with-micropython-and-oled-display/
vertices = [
[1,0,1],
[2,0,-1],
[0,0,-1],
[1,1,-1],
]
edges = [
[0, 1],
[0, 2],
[0, 3],
[1, 2],
[2, 3],
[1, 3],
]
a=0
def rotate_x(sx, sy, sz, deg):
rad = deg * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
y = sy * cosa - sz * sina
z = sy * sina + sz * cosa
return [sx, y, z]
def rotate_y(sx, sy, sz, angle):
rad = angle * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
z = sz * cosa - sx * sina
x = sz * sina + sx * cosa
return [x, sy, z]
def rotate_z(sx, sy, sz, angle):
rad = angle * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
x = sx * cosa - sy * sina
y = sx * sina + sy * cosa
return [x, y, sz]
def project(sx, sy, sz, px, py, fov = 60, viewer_distance = 8):
factor = fov / (viewer_distance + sz)
x = sx * factor + px
y = -sy * factor + py
return [x, y]
def render(vertices, edges, rx, ry, rz, px, py, fov = 60, viewer_distance = 6):
rx = rx%360
ry = ry%360
rz = rz%360
points = []
for i in vertices:
i = rotate_x(i[0], i[1], i[2], rx)
i = rotate_y(i[0], i[1], i[2], ry)
i = rotate_z(i[0], i[1], i[2], rz)
pos = project(i[0], i[1], i[2], px, py, fov, viewer_distance)
points.append(pos)
#clear()
for i in edges:
line(points[i[0]], points[i[1]])
def draw():
clear_screen()
global a
global vertices, edges
#render(vertices, edges, 345, a, 0, 32, 16)
render(vertices, edges, a, a, 0, 64, 32)
a+=1
show_screen()
while 1:
draw()
"""for i in range(1000):
pass"""
"""draw()"""

90
main2.py Normal file
View File

@ -0,0 +1,90 @@
# 3D cube
# by mibi88
from line import *
import math
#width(3)
# unsed some code from https://www.mfitzp.com/creating-a-3d-rotating-cube-with-micropython-and-oled-display/
vertices = [
[1,0,1],
[2,0,-1],
[0,0,-1],
[1,1,-1],
]
edges = [
[0, 1, 2],
[0, 1, 3],
[1, 2, 3],
[0, 2, 3]
]
a=0
def rotate_x(sx, sy, sz, deg):
rad = deg * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
y = sy * cosa - sz * sina
z = sy * sina + sz * cosa
return [sx, y, z]
def rotate_y(sx, sy, sz, angle):
rad = angle * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
z = sz * cosa - sx * sina
x = sz * sina + sx * cosa
return [x, sy, z]
def rotate_z(sx, sy, sz, angle):
rad = angle * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
x = sx * cosa - sy * sina
y = sx * sina + sy * cosa
return [x, y, sz]
def project(sx, sy, sz, px, py, pz, fov = 60, viewer_distance = 8, w=128, h=64):
factor = fov / (viewer_distance + (sz+pz))
x = (sx+px) * factor + (w/2)
y = -(sy+py) * factor + (h/2)
return [x, y]
def render(vertices, triangles, rx, ry, rz, px, py, pz, fov = 60, viewer_distance = 6, w=128, h=64):
rx = rx%360
ry = ry%360
rz = rz%360
points = []
for i in vertices:
i = rotate_x(i[0], i[1], i[2], rx)
i = rotate_y(i[0], i[1], i[2], ry)
i = rotate_z(i[0], i[1], i[2], rz)
pos = project(i[0], i[1], i[2], px, py, pz, fov, viewer_distance, w, h)
print(pos)
points.append(pos)
#clear()
for i in triangles:
line(points[i[0]], points[i[1]])
line(points[i[1]], points[i[2]])
line(points[i[0]], points[i[2]])
def draw():
clear_screen()
global a
global vertices, edges
#render(vertices, edges, 345, a, 0, 32, 16)
render(vertices, edges, a, a, 0, 0, 0, 0)
a+=1
show_screen()
while 1:
draw()
"""for i in range(1000):
pass"""
"""draw()"""

89
mainPE.py Normal file
View File

@ -0,0 +1,89 @@
# 3D cube
# by mibi88
from PLANE.line import *
import math
#width(3)
# unsed some code from https://www.mfitzp.com/creating-a-3d-rotating-cube-with-micropython-and-oled-display/
vertices = [
[1,0,1],
[2,0,-1],
[0,0,-1],
[1,1,-1],
]
edges = [
[0, 1],
[0, 2],
[0, 3],
[1, 2],
[2, 3],
[1, 3],
]
a=0
def rotate_x(sx, sy, sz, deg):
rad = deg * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
y = sy * cosa - sz * sina
z = sy * sina + sz * cosa
return [sx, y, z]
def rotate_y(sx, sy, sz, angle):
rad = angle * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
z = sz * cosa - sx * sina
x = sz * sina + sx * cosa
return [x, sy, z]
def rotate_z(sx, sy, sz, angle):
rad = angle * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
x = sx * cosa - sy * sina
y = sx * sina + sy * cosa
return [x, y, sz]
def project(sx, sy, sz, px, py, fov = 60, viewer_distance = 8):
factor = fov / (viewer_distance + sz)
x = sx * factor + px
y = -sy * factor + py
return [x, y]
def render(vertices, edges, rx, ry, rz, px, py, fov = 60, viewer_distance = 6):
rx = rx%360
ry = ry%360
rz = rz%360
points = []
for i in vertices:
i = rotate_x(i[0], i[1], i[2], rx)
i = rotate_y(i[0], i[1], i[2], ry)
i = rotate_z(i[0], i[1], i[2], rz)
pos = project(i[0], i[1], i[2], px, py, fov, viewer_distance)
points.append(pos)
#clear()
for i in edges:
line(points[i[0]], points[i[1]])
def draw():
clear_screen()
global a
global vertices, edges
#render(vertices, edges, 345, a, 0, 32, 16)
render(vertices, edges, a, a, 0, 64, 32)
a+=1
show_screen()
while 1:
draw()
"""for i in range(1000):
pass"""
"""draw()"""

96
mainPE2.py Normal file
View File

@ -0,0 +1,96 @@
# 3D cube
# by mibi88
from PLANE.line import *
import math, time
#width(3)
# unsed some code from https://www.mfitzp.com/creating-a-3d-rotating-cube-with-micropython-and-oled-display/
vertices = [
[1,0,1],
[2,0,-1],
[0,0,-1],
[1,1,-1],
]
edges = [
[0, 1, 2],
[0, 1, 3],
[1, 2, 3],
[0, 2, 3]
]
a=0
def rotate_x(sx, sy, sz, deg):
rad = deg * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
y = sy * cosa - sz * sina
z = sy * sina + sz * cosa
return [sx, y, z]
def rotate_y(sx, sy, sz, angle):
rad = angle * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
z = sz * cosa - sx * sina
x = sz * sina + sx * cosa
return [x, sy, z]
def rotate_z(sx, sy, sz, angle):
rad = angle * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
x = sx * cosa - sy * sina
y = sx * sina + sy * cosa
return [x, y, sz]
def project(sx, sy, sz, px, py, pz, fov = 60, viewer_distance = 8, w=128, h=64):
factor = fov / (viewer_distance + (sz+pz))
x = (sx+px) * factor + (w/2)
y = -(sy+py) * factor + (h/2)
return [x, y]
def render(vertices, triangles, rx, ry, rz, px, py, pz, fov = 60, viewer_distance = 6, w=128, h=64):
rx = rx%360
ry = ry%360
rz = rz%360
points = []
for i in vertices:
i = rotate_x(i[0], i[1], i[2], rx)
i = rotate_y(i[0], i[1], i[2], ry)
i = rotate_z(i[0], i[1], i[2], rz)
pos = project(i[0], i[1], i[2], px, py, pz, fov, viewer_distance, w, h)
#print(pos)
points.append(pos)
#clear()
for i in triangles:
line(points[i[0]], points[i[1]])
line(points[i[1]], points[i[2]])
line(points[i[0]], points[i[2]])
def draw():
global a
global vertices, edges
#render(vertices, edges, 345, a, 0, 32, 16)
start=time.time()
clear_screen()
render(vertices, edges, a, a, 0, 0, 0, 0)
show_screen()
tps=(1/(time.time()-start)*4)
print(tps)
a+=1
while 1:
try:
draw()
except:
break
"""for i in range(1000):
pass"""
"""draw()"""