Advertisement
9551

Untitled

Sep 26th, 2021
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.10 KB | None | 0 0
  1. local per = peripheral.wrap("back")
  2. local c =  per.canvas()
  3. local pretty = require("cc.pretty")
  4. c.clear()
  5. local points = {
  6.     { {-10,},{-10},{-10}},
  7.     { {10},{-10},{-10}},
  8.     { {10},{10},{-10}},
  9.     { {-10},{10},{-10}},
  10.     { {-10},{-10},{10}},
  11.     { {10},{-10},{10}},
  12.     { {10},{10},{10}},
  13.     { {-10},{10},{10}}
  14. }
  15. local projection = {
  16.     {1,0,0},
  17.     {0,1,0},
  18.     {0,0,1}
  19. }
  20. local function matmul(m1, m2)
  21.     if #m1[1] ~= #m2 then
  22.         error("Columns m1 must match rows m2",2)
  23.         return nil
  24.     end
  25.     local result = {}
  26.     for i = 1, #m1 do
  27.         result[i] = {}
  28.         for j = 1, #m2[1] do
  29.             local sum = 0
  30.             for k = 1, #m2 do
  31.                 sum = sum + (m1[i][k] * m2[k][j])
  32.             end
  33.             result[i][j] = sum
  34.         end
  35.     end
  36.     return result
  37. end
  38. local angleX = 0
  39. local angleY = 0
  40. local angleZ = 0
  41. local pointIDs = {}
  42. local lineIDs = {}
  43. for k,v in pairs(points) do
  44.     pointIDs[k] = c.addDot({v[1][1]+80,v[2][1]+80},0xFF0000FF,3)
  45. end
  46. for i=1,12 do
  47.     lineIDs[i] = c.addLine({0,0},{0,0},0x0FFFFFFF,5)
  48. end
  49. local indexcon = 0
  50. local function connect(a,b)
  51.     indexcon = indexcon + 1
  52.     if not lineIDs[indexcon] then
  53.         lineIDs[indexcon] = c.addLine({a[1][1]+80,a[2][1]+80},{b[1][1]+80,b[2][1]+80},0x0FFFFFFF,1)
  54.     else
  55.         lineIDs[indexcon].setPoint(1,a[1][1]+80,a[2][1]+80)
  56.         lineIDs[indexcon].setPoint(2,b[1][1]+80,b[2][1]+80)
  57.     end
  58.     if indexcon >= 12 then indexcon = 0 end
  59. end
  60. local proj = {}
  61. local rot = 0
  62. while true do
  63.     rot = rot + 0.05
  64.     local angleY = rot
  65.     local rotationZ = {
  66.         {math.cos(angleZ),-math.sin(angleZ),0},
  67.         {math.sin(angleZ),math.cos(angleZ),0},
  68.         {0,0,1}
  69.     }
  70.     local rotationX = {
  71.         {1,0,0},
  72.         {0,math.cos(angleX),-math.sin(angleX)},
  73.         {0,math.sin(angleX),math.cos(angleX)}
  74.     }
  75.     local rotationY = {
  76.         {math.cos(angleY),0,-math.sin(angleY)},
  77.         {0,1,0},
  78.         {math.sin(angleY),0,math.cos(angleY)}
  79.     }
  80.     local index = 1
  81.     for k,v in pairs(points) do
  82.         local pointData = {v[1],v[2],v[3]}
  83.         local rotatedX = matmul(rotationX,pointData)
  84.         local rotatedY = matmul(rotationY,rotatedX)
  85.         local rotatedZ = matmul(rotationZ,rotatedY)
  86.         local final = rotatedY
  87.         local distance =-1
  88.         local dist = 1 / (distance-final[3][1])
  89.         local projection = {
  90.             {dist or 1,0,0},
  91.             {0,dist or 1,0},
  92.             {0,0,dist or 1}
  93.         }
  94.         pretty.print(pretty.pretty(final))
  95.         local projected = matmul(projection,final)
  96.         pointIDs[k].setPosition(projected[1][1]+80,projected[2][1]+80)
  97.         proj[index] = projected
  98.         index = index + 1
  99.     end
  100.     connect(proj[1],proj[2])
  101.     connect(proj[2],proj[3])
  102.     connect(proj[3],proj[4])
  103.     connect(proj[4],proj[1])
  104.    
  105.     connect(proj[5],proj[6])
  106.     connect(proj[6],proj[7])
  107.     connect(proj[7],proj[8])
  108.     connect(proj[8],proj[5])
  109.  
  110.     connect(proj[1],proj[5])
  111.     connect(proj[2],proj[6])
  112.     connect(proj[3],proj[7])
  113.     connect(proj[4],proj[8])
  114.  
  115.     sleep(0.05)
  116. end
  117.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement