Jump to content

Draw a rotating cube: Difference between revisions

(→‎{{header|Lua}}: added Lua solution)
Line 610:
Draws only the visible edges
 
[https://easylang.online/apps/_rotating-cube.html Run it]
[https://easylang.online/ide/?run=node%5B%5D%5B%5D%26%3D%5B%20-1%20-1%20-1%20%5D%0Anode%5B%5D%5B%5D%26%3D%5B%20-1%20-1%201%20%5D%0Anode%5B%5D%5B%5D%26%3D%5B%20-1%201%20-1%20%5D%0Anode%5B%5D%5B%5D%26%3D%5B%20-1%201%201%20%5D%0Anode%5B%5D%5B%5D%26%3D%5B%201%20-1%20-1%20%5D%0Anode%5B%5D%5B%5D%26%3D%5B%201%20-1%201%20%5D%0Anode%5B%5D%5B%5D%26%3D%5B%201%201%20-1%20%5D%0Anode%5B%5D%5B%5D%26%3D%5B%201%201%201%20%5D%0A%23%20%0Aedge%5B%5D%5B%5D%26%3D%5B%200%201%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%201%203%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%203%202%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%202%200%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%204%205%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%205%207%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%207%206%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%206%204%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%200%204%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%201%205%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%202%206%20%5D%0Aedge%5B%5D%5B%5D%26%3D%5B%203%207%20%5D%0A%23%20%0Afunc%20scale%20f%20.%20.%0Afor%20i%20range%20len%20node%5B%5D%5B%5D%0Aswap%20n%5B%5D%20node%5B%5D%5Bi%5D%0An%5B0%5D%2A%3Df%0An%5B1%5D%2A%3Df%0An%5B2%5D%2A%3Df%0Aswap%20n%5B%5D%20node%5B%5D%5Bi%5D%0A.%0A.%0Afunc%20rotate%20angx%20angy%20.%20.%0Asinx%3Dsin%20angx%0Acosx%3Dcos%20angx%0Asiny%3Dsin%20angy%0Acosy%3Dcos%20angy%0Afor%20i%20range%20len%20node%5B%5D%5B%5D%0Aswap%20n%5B%5D%20node%5B%5D%5Bi%5D%0Ax%3Dn%5B0%5D%0Ay%3Dn%5B1%5D%0Az%3Dn%5B2%5D%0An%5B0%5D%3Dx%2Acosx%20-%20z%2Asinx%0An%5B2%5D%3Dz%2Acosx%2Bx%2Asinx%0Az%3Dn%5B2%5D%0An%5B1%5D%3Dy%2Acosy%20-%20z%2Asiny%0An%5B2%5D%3Dz%2Acosy%2By%2Asiny%0Aswap%20n%5B%5D%20node%5B%5D%5Bi%5D%0A.%0A.%0Alen%20nd%5B%5D%203%0Afunc%20draw%20.%20.%0Aclear%0Am%3D999%0Ami%3D-1%0Afor%20i%20range%20len%20node%5B%5D%5B%5D%0Aif%20node%5B2%5D%5Bi%5D%20%3C%20m%0Am%3Dnode%5B2%5D%5Bi%5D%0Ami%3Di%0A.%0A.%0Aix%3D0%0Afor%20i%20range%20len%20edge%5B%5D%5B%5D%0Aif%20edge%5B0%5D%5Bi%5D%3Dmi%0And%5Bix%5D%3Dedge%5B1%5D%5Bi%5D%0Aix%2B%3D1%0Aelif%20edge%5B1%5D%5Bi%5D%3Dmi%0And%5Bix%5D%3Dedge%5B0%5D%5Bi%5D%0Aix%2B%3D1%0A.%0A.%0Afor%20ni%20range%20len%20nd%5B%5D%0Afor%20i%20range%20len%20edge%5B%5D%5B%5D%0Aif%20edge%5B0%5D%5Bi%5D%3Dnd%5Bni%5D%20or%20edge%5B1%5D%5Bi%5D%3Dnd%5Bni%5D%0Ax1%3Dnode%5B0%5D%5Bedge%5B0%5D%5Bi%5D%5D%0Ay1%3Dnode%5B1%5D%5Bedge%5B0%5D%5Bi%5D%5D%0Ax2%3Dnode%5B0%5D%5Bedge%5B1%5D%5Bi%5D%5D%0Ay2%3Dnode%5B1%5D%5Bedge%5B1%5D%5Bi%5D%5D%0Amove%20x1%2B50%20y1%2B50%0Aline%20x2%2B50%20y2%2B50%0A.%0A.%0A.%0A.%0Acall%20scale%2025%0Acall%20rotate%2045%20atan%20sqrt%202%0Acall%20draw%0Aon%20animate%0Acall%20rotate%201%200%0Acall%20draw%0A. Run it]
 
<lang>node[][] &= [ -1 -1 -1 ]
Line 636:
func scale f . .
for i range len node[][]
swap n[] node[i][i]
n[0] *= f
n[1] *= f
n[2] *= f
swap n[] node[i][i]
.
.
Line 649:
cosy = cos angy
for i range len node[][]
swap n[] node[i][i]
x = n[0]
y = n[1]
Line 658:
n[1] = y * cosy - z * siny
n[2] = z * cosy + y * siny
swap n[] node[i][i]
.
.
len nd[] 3
func draw . .
clear_screen
clear
m = 999
mi = -1
for i range len node[][]
if node[2i][i2] < m
m = node[2i][i2]
mi = i
.
Line 674:
ix = 0
for i range len edge[][]
if edge[0i][i0] = mi
nd[ix] = edge[1i][i1]
ix += 1
elif edge[1i][i1] = mi
nd[ix] = edge[0i][i0]
ix += 1
.
Line 684:
for ni range len nd[]
for i range len edge[][]
if edge[0i][i0] = nd[ni] or edge[1i][i1] = nd[ni]
x1 = node[0][edge[0i][i0]][0]
y1 = node[1][edge[0i][i0]][1]
x2 = node[0][edge[1i][i1]][0]
y2 = node[1][edge[1i][i1]][1]
movemove_pen x1 + 50 y1 + 50
linedraw_line x2 + 50 y2 + 50
.
.
2,083

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.