Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local per = peripheral.wrap("back")
- local c = per.canvas()
- c.clear()
- local points = {
- { {-10,},{-10},{-10}},
- { {10},{-10},{-10}},
- { {10},{10},{-10}},
- { {-10},{10},{-10}},
- { {-10},{-10},{10}},
- { {10},{-10},{10}},
- { {10},{10},{10}},
- { {-10},{10},{10}}
- }
- local projection = {
- {1,0,0},
- {0,1,0},
- {0,0,1}
- }
- local function matmul(m1, m2)
- if #m1[1] ~= #m2 then
- error("Columns m1 must match rows m2",2)
- return nil
- end
- local result = {}
- for i = 1, #m1 do
- result[i] = {}
- for j = 1, #m2[1] do
- local sum = 0
- for k = 1, #m2 do
- sum = sum + (m1[i][k] * m2[k][j])
- end
- result[i][j] = sum
- end
- end
- return result
- end
- local angleX = 0
- local angleY = 0
- local angleZ = 0
- local pointIDs = {}
- local lineIDs = {}
- for k,v in pairs(points) do
- pointIDs[k] = c.addDot({v[1][1]+80,v[2][1]+80},0xFF0000FF,3)
- end
- for i=1,12 do
- lineIDs[i] = c.addLine({0,0},{0,0},0x0FFFFFFF,5)
- end
- local indexcon = 0
- local function connect(a,b)
- indexcon = indexcon + 1
- if not lineIDs[indexcon] then
- lineIDs[indexcon] = c.addLine({a[1][1]+80,a[2][1]+80},{b[1][1]+80,b[2][1]+80},0x0FFFFFFF,1)
- else
- lineIDs[indexcon].setPoint(1,a[1][1]+80,a[2][1]+80)
- lineIDs[indexcon].setPoint(2,b[1][1]+80,b[2][1]+80)
- end
- if indexcon >= 12 then indexcon = 0 end
- end
- local proj = {}
- while true do
- local meta = per.getMetaOwner()
- local angleY = math.rad(-meta.yaw)
- local angleX = math.rad(meta.pitch)
- local rotationZ = {
- {math.cos(angleZ),-math.sin(angleZ),0},
- {math.sin(angleZ),math.cos(angleZ),0},
- {0,0,1}
- }
- local rotationX = {
- {1,0,0},
- {0,math.cos(angleX),-math.sin(angleX)},
- {0,math.sin(angleX),math.cos(angleX)}
- }
- local rotationY = {
- {math.cos(angleY),0,-math.sin(angleY)},
- {0,1,0},
- {math.sin(angleY),0,math.cos(angleY)}
- }
- local index = 1
- for k,v in pairs(points) do
- local pointData = {v[1],v[2],v[3]}
- local rotatedX = matmul(rotationX,pointData)
- local rotatedZ = matmul(rotationZ,rotatedX)
- local rotatedY = matmul(rotationY,rotatedZ)
- local projected = matmul(projection,rotatedY)
- pointIDs[k].setPosition(projected[1][1]+80,projected[2][1]+80)
- proj[index] = projected
- index = index + 1
- end
- connect(proj[1],proj[2])
- connect(proj[2],proj[3])
- connect(proj[3],proj[4])
- connect(proj[4],proj[1])
- connect(proj[5],proj[6])
- connect(proj[6],proj[7])
- connect(proj[7],proj[8])
- connect(proj[8],proj[5])
- connect(proj[1],proj[5])
- connect(proj[2],proj[6])
- connect(proj[3],proj[7])
- connect(proj[4],proj[8])
- sleep(0.05)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement