Guest User

Untitled

a guest
Jan 6th, 2013
576
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. function line(monitor,x0 ,y0 ,x1 ,y1,r,g,b)
  2. local steep = math.abs(y1 - y0) > math.abs(x1 - x0)
  3. if steep then
  4. local tmp = x0
  5. x0 = y0
  6. y0 = tmp
  7. tmp = x1
  8. x1 = y1
  9. y1 = tmp
  10. end
  11. if x0 > x1 then
  12. local tmp = x0
  13. x0 = x1
  14. x1 = tmp
  15. tmp = y0
  16. y0 = y1
  17. y1 = tmp
  18. end
  19. local deltax = x1 - x0
  20. local deltay = math.abs(y1 - y0)
  21. local err = 0
  22. local deltaerr = deltay / deltax
  23. local y = y0
  24. local ystep = 0
  25. if y0 < y1 then ystep = 1 else ystep = -1 end
  26. for x = x0, x1 do
  27. if steep then monitor.setColorRGB(r,g,b,y,x) else monitor.setColorRGB(r,g,b,x,y) end
  28. err = err + deltaerr
  29. if err >= 0.5 then
  30. y = y + ystep
  31. err = err - 1
  32. end
  33. end
  34. end
  35.  
  36. -- Code
  37. lMonitor = peripheral.wrap("back:red")
  38.  
  39. numLines = 12
  40.  
  41. lOx = {}
  42. lOy = {}
  43. lOz = {}
  44.  
  45. lRx = {}
  46. lRy = {}
  47. lRz = {}
  48.  
  49. scrX = {}
  50. scrY = {}
  51.  
  52. oldX = {}
  53. oldY = {}
  54.  
  55. s = {}
  56. c = {}
  57.  
  58. PI = 3.141592
  59.  
  60. for i = 1, 360, 1 do
  61. s[i] = math.sin(i * (PI / 180))
  62. c[i] = math.cos(i * (PI / 180))
  63. end
  64.  
  65. lOx[1] = {-50,50}
  66. lOy[1] = {50,50}
  67. lOz[1] = {50,50}
  68. lOx[2] = {50,50}
  69. lOy[2] = {-50,50}
  70. lOz[2] = {50,50}
  71. lOx[3] = {50,50}
  72. lOy[3] = {50,50}
  73. lOz[3] = {-50,50}
  74. lOx[4] = {-50,-50}
  75. lOy[4] = {-50,50}
  76. lOz[4] = {50,50}
  77. lOx[5] = {-50,-50}
  78. lOy[5] = {50,50}
  79. lOz[5] = {-50,50}
  80. lOx[6] = {-50,50}
  81. lOy[6] = {-50,-50}
  82. lOz[6] = {50,50}
  83. lOx[7] = {-50,50}
  84. lOy[7] = {50,50}
  85. lOz[7] = {-50,-50}
  86. lOx[8] = {-50,50}
  87. lOy[8] = {-50,-50}
  88. lOz[8] = {-50,-50}
  89. lOx[9] = {-50,-50}
  90. lOy[9] = {-50,50}
  91. lOz[9] = {-50,-50}
  92. lOx[10] = {50,50}
  93. lOy[10] = {-50,-50}
  94. lOz[10] = {-50,50}
  95. lOx[11] = {50,50}
  96. lOy[11] = {-50,50}
  97. lOz[11] = {-50,-50}
  98. lOx[12] = {-50,-50}
  99. lOy[12] = {-50,-50}
  100. lOz[12] = {-50,50}
  101.  
  102. for i = 1, numLines, 1 do
  103. lRx[i] = {0,0}
  104. lRy[i] = {0,0}
  105. lRz[i] = {0,0}
  106. oldX[i] = {0,0}
  107. oldY[i] = {0,0}
  108. scrX[i] = {0,0}
  109. scrY[i] = {0,0}
  110. end
  111.  
  112. xCenter, yCenter = lMonitor.getSize()
  113. xCenter, yCenter = xCenter / 2, yCenter / 2
  114. zCenter = 128 + 64
  115. theta = 0
  116. phi = 0
  117. thetaRot = 2
  118. phiRot = 2
  119.  
  120. function ftw()
  121. for i = 1, numLines, 1 do
  122. oldX[i][1], oldY[i][1] = scrX[i][1], scrY[i][1]
  123. oldX[i][2], oldY[i][2] = scrX[i][2], scrY[i][2]
  124.  
  125. lRx[i][1] = (lOx[i][1] * -1) * s[theta+1] + lOy[i][1] * c[theta+1]
  126. 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
  127. 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]
  128.  
  129. lRx[i][2] = (lOx[i][2] * -1) * s[theta+1] + lOy[i][2] * c[theta+1]
  130. 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
  131. 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]
  132.  
  133. if (lRz[i][1] + zCenter) ~= 0 then
  134. scrX[i][1] = 256 * (lRx[i][1] / (lRz[i][1] + zCenter)) + xCenter
  135. scrY[i][1] = 256 * (lRy[i][1] / (lRz[i][1] + zCenter)) + yCenter
  136. end
  137.  
  138. if (lRz[i][2] + zCenter) ~= 0 then
  139. scrX[i][2] = 256 * (lRx[i][2] / (lRz[i][2] + zCenter)) + xCenter
  140. scrY[i][2] = 256 * (lRy[i][2] / (lRz[i][2] + zCenter)) + yCenter
  141. end
  142. end
  143.  
  144. for i = 1, numLines, 1 do
  145. line(lMonitor,oldX[i][1], oldY[i][1], oldX[i][2], oldY[i][2],0,0,0)
  146. end
  147.  
  148. for i = 1, numLines, 1 do
  149. line(lMonitor,scrX[i][1], scrY[i][1], scrX[i][2], scrY[i][2],255,255,255)
  150. end
  151.  
  152. theta = math.fmod(theta + thetaRot, 360)
  153. phi = math.fmod(phi + phiRot, 360)
  154. end
  155.  
  156. lMonitor.fill(0,0,0)
  157. while true do
  158. ftw()
  159. sleep(0.05)
  160. end
Advertisement
Add Comment
Please, Sign In to add comment