Draw a rotating cube: Difference between revisions
Content added Content deleted
(→{{header|Lua}}: added Lua solution) |
|||
Line 610: | Line 610: | ||
Draws only the visible edges |
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 ] |
<lang>node[][] &= [ -1 -1 -1 ] |
||
Line 636: | Line 636: | ||
func scale f . . |
func scale f . . |
||
for i range len node[][] |
for i range len node[][] |
||
swap n[] node[][ |
swap n[] node[i][] |
||
n[0] *= f |
n[0] *= f |
||
n[1] *= f |
n[1] *= f |
||
n[2] *= f |
n[2] *= f |
||
swap n[] node[][ |
swap n[] node[i][] |
||
. |
. |
||
. |
. |
||
Line 649: | Line 649: | ||
cosy = cos angy |
cosy = cos angy |
||
for i range len node[][] |
for i range len node[][] |
||
swap n[] node[][ |
swap n[] node[i][] |
||
x = n[0] |
x = n[0] |
||
y = n[1] |
y = n[1] |
||
Line 658: | Line 658: | ||
n[1] = y * cosy - z * siny |
n[1] = y * cosy - z * siny |
||
n[2] = z * cosy + y * siny |
n[2] = z * cosy + y * siny |
||
swap n[] node[][ |
swap n[] node[i][] |
||
. |
. |
||
. |
. |
||
len nd[] 3 |
len nd[] 3 |
||
func draw . . |
func draw . . |
||
clear_screen |
|||
clear |
|||
m = 999 |
m = 999 |
||
mi = -1 |
mi = -1 |
||
for i range len node[][] |
for i range len node[][] |
||
if node[ |
if node[i][2] < m |
||
m = node[ |
m = node[i][2] |
||
mi = i |
mi = i |
||
. |
. |
||
Line 674: | Line 674: | ||
ix = 0 |
ix = 0 |
||
for i range len edge[][] |
for i range len edge[][] |
||
if edge[ |
if edge[i][0] = mi |
||
nd[ix] = edge[ |
nd[ix] = edge[i][1] |
||
ix += 1 |
ix += 1 |
||
elif edge[ |
elif edge[i][1] = mi |
||
nd[ix] = edge[ |
nd[ix] = edge[i][0] |
||
ix += 1 |
ix += 1 |
||
. |
. |
||
Line 684: | Line 684: | ||
for ni range len nd[] |
for ni range len nd[] |
||
for i range len edge[][] |
for i range len edge[][] |
||
if edge[ |
if edge[i][0] = nd[ni] or edge[i][1] = nd[ni] |
||
x1 = node |
x1 = node[edge[i][0]][0] |
||
y1 = node |
y1 = node[edge[i][0]][1] |
||
x2 = node |
x2 = node[edge[i][1]][0] |
||
y2 = node |
y2 = node[edge[i][1]][1] |
||
move_pen x1 + 50 y1 + 50 |
|||
draw_line x2 + 50 y2 + 50 |
|||
. |
. |
||
. |
. |