Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function line(monitor,x0 ,y0 ,x1 ,y1,r,g,b)
- local steep = math.abs(y1 - y0) > math.abs(x1 - x0)
- if steep then
- local tmp = x0
- x0 = y0
- y0 = tmp
- tmp = x1
- x1 = y1
- y1 = tmp
- end
- if x0 > x1 then
- local tmp = x0
- x0 = x1
- x1 = tmp
- tmp = y0
- y0 = y1
- y1 = tmp
- end
- local deltax = x1 - x0
- local deltay = math.abs(y1 - y0)
- local err = 0
- local deltaerr = deltay / deltax
- local y = y0
- local ystep = 0
- if y0 < y1 then ystep = 1 else ystep = -1 end
- for x = x0, x1 do
- if steep then monitor.setColorRGB(r,g,b,y,x) else monitor.setColorRGB(r,g,b,x,y) end
- err = err + deltaerr
- if err >= 0.5 then
- y = y + ystep
- err = err - 1
- end
- end
- end
- -- Code
- lMonitor = peripheral.wrap("back:red")
- numLines = 12
- lOx = {}
- lOy = {}
- lOz = {}
- lRx = {}
- lRy = {}
- lRz = {}
- scrX = {}
- scrY = {}
- oldX = {}
- oldY = {}
- s = {}
- c = {}
- PI = 3.141592
- for i = 1, 360, 1 do
- s[i] = math.sin(i * (PI / 180))
- c[i] = math.cos(i * (PI / 180))
- end
- lOx[1] = {-50,50}
- lOy[1] = {50,50}
- lOz[1] = {50,50}
- lOx[2] = {50,50}
- lOy[2] = {-50,50}
- lOz[2] = {50,50}
- lOx[3] = {50,50}
- lOy[3] = {50,50}
- lOz[3] = {-50,50}
- lOx[4] = {-50,-50}
- lOy[4] = {-50,50}
- lOz[4] = {50,50}
- lOx[5] = {-50,-50}
- lOy[5] = {50,50}
- lOz[5] = {-50,50}
- lOx[6] = {-50,50}
- lOy[6] = {-50,-50}
- lOz[6] = {50,50}
- lOx[7] = {-50,50}
- lOy[7] = {50,50}
- lOz[7] = {-50,-50}
- lOx[8] = {-50,50}
- lOy[8] = {-50,-50}
- lOz[8] = {-50,-50}
- lOx[9] = {-50,-50}
- lOy[9] = {-50,50}
- lOz[9] = {-50,-50}
- lOx[10] = {50,50}
- lOy[10] = {-50,-50}
- lOz[10] = {-50,50}
- lOx[11] = {50,50}
- lOy[11] = {-50,50}
- lOz[11] = {-50,-50}
- lOx[12] = {-50,-50}
- lOy[12] = {-50,-50}
- lOz[12] = {-50,50}
- for i = 1, numLines, 1 do
- lRx[i] = {0,0}
- lRy[i] = {0,0}
- lRz[i] = {0,0}
- oldX[i] = {0,0}
- oldY[i] = {0,0}
- scrX[i] = {0,0}
- scrY[i] = {0,0}
- end
- xCenter, yCenter = lMonitor.getSize()
- xCenter, yCenter = xCenter / 2, yCenter / 2
- zCenter = 128 + 64
- theta = 0
- phi = 0
- thetaRot = 2
- phiRot = 2
- function ftw()
- for i = 1, numLines, 1 do
- oldX[i][1], oldY[i][1] = scrX[i][1], scrY[i][1]
- oldX[i][2], oldY[i][2] = scrX[i][2], scrY[i][2]
- lRx[i][1] = (lOx[i][1] * -1) * s[theta+1] + lOy[i][1] * c[theta+1]
- lRy[i][1] = (lOx[i][1] * -1) * c[theta+1] *s[phi+1] - lOy[i][1] * s[theta+1] * s[phi+1] - lOz[i][1] * c[phi+1] + 1
- lRz[i][1] = (lOx[i][1] * -1) * c[theta+1] *c[phi+1] - lOy[i][1] * s[theta+1] * c[phi+1] + lOz[i][1] * s[phi+1]
- lRx[i][2] = (lOx[i][2] * -1) * s[theta+1] + lOy[i][2] * c[theta+1]
- lRy[i][2] = (lOx[i][2] * -1) * c[theta+1] *s[phi+1] - lOy[i][2] * s[theta+1] * s[phi+1] - lOz[i][2] * c[phi+1] + 1
- lRz[i][2] = (lOx[i][2] * -1) * c[theta+1] *c[phi+1] - lOy[i][2] * s[theta+1] * c[phi+1] + lOz[i][2] * s[phi+1]
- if (lRz[i][1] + zCenter) ~= 0 then
- scrX[i][1] = 256 * (lRx[i][1] / (lRz[i][1] + zCenter)) + xCenter
- scrY[i][1] = 256 * (lRy[i][1] / (lRz[i][1] + zCenter)) + yCenter
- end
- if (lRz[i][2] + zCenter) ~= 0 then
- scrX[i][2] = 256 * (lRx[i][2] / (lRz[i][2] + zCenter)) + xCenter
- scrY[i][2] = 256 * (lRy[i][2] / (lRz[i][2] + zCenter)) + yCenter
- end
- end
- for i = 1, numLines, 1 do
- line(lMonitor,oldX[i][1], oldY[i][1], oldX[i][2], oldY[i][2],0,0,0)
- end
- for i = 1, numLines, 1 do
- line(lMonitor,scrX[i][1], scrY[i][1], scrX[i][2], scrY[i][2],255,255,255)
- end
- theta = math.fmod(theta + thetaRot, 360)
- phi = math.fmod(phi + phiRot, 360)
- end
- lMonitor.fill(0,0,0)
- while true do
- ftw()
- sleep(0.05)
- end
Advertisement
Add Comment
Please, Sign In to add comment