Advertisement
incinirate

Filled Circle Generator

Jul 23rd, 2015
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.65 KB | None | 0 0
  1. local sin45 = 0.70710678118
  2.  
  3. function max(tab)
  4.   local n = 0
  5.   for k,v in pairs(tab) do
  6.     if v>n then
  7.       n=v
  8.     end
  9.   end
  10.   return n
  11. end
  12.  
  13. function getSlice(r)
  14.   local cap = r*sin45
  15.   local rs = r^2
  16.  
  17.   local ptab = {}
  18.  
  19.   for i=cap,r,0.1 do
  20.     local val = math.sqrt(rs - i^2)
  21.     if not ptab[i] then
  22.       ptab[i] = val
  23.     elseif val > ptab[i] then
  24.       ptab[i] = val
  25.     end
  26.   end
  27.   return ptab
  28. end
  29.  
  30. function getQuarter(r)
  31.   local slice = getSlice(r)
  32.  
  33.   local ptab = {}
  34.  
  35.   for k,v in pairs(slice) do
  36.     ptab[k]=v
  37.     ptab[v]=k
  38.   end
  39.   return ptab
  40. end
  41.  
  42. function getHalf(r)
  43.   local quarter = getQuarter(r)
  44.  
  45.   local ptab = {}
  46.  
  47.   for k,v in pairs(quarter) do
  48.     ptab[k]=v
  49.     ptab[-k]=v
  50.   end
  51.   return ptab
  52. end
  53.  
  54. function drawCircle(ptab,ofx,ofy,sc)
  55.   term.setBackgroundColor(colors.white)
  56.   for k,v in pairs(ptab) do
  57.     local cx = 0
  58.     local cy = sc and k*(2/3) or k
  59.     cy = math.floor(cy)
  60.     term.setCursorPos(cx+ofx,cy+ofy)
  61.     term.write(string.rep(" ",v))
  62.     term.setCursorPos(ofx-v+1,cy+ofy)
  63.     term.write(string.rep(" ",v))
  64.   end
  65.   local len = max(ptab)
  66.   --if len>10 then len = len + 1 end
  67.   term.setCursorPos(ofx-len+1,ofy-1)
  68.   term.write(string.rep(" ",len*2-1))
  69.   term.setCursorPos(ofx-len+1,ofy)
  70.   term.write(string.rep(" ",len*2-1))
  71.   term.setBackgroundColor(colors.black)
  72. end
  73.  
  74. local tArgs = {...}
  75.  
  76. local rz = 5
  77. local scc = false
  78. if tArgs[1] and tonumber(tArgs[1]) then
  79.   rz = tArgs[1]
  80. end
  81. if tArgs[2] then
  82.   scc=tArgs[2]
  83. end
  84. local tx,ty = term.getSize()
  85. drawCircle(getHalf(rz),math.floor(tx/2)+1,math.floor(ty/2)+1,scc)
  86. os.pullEvent()
  87. term.clear()
  88. term.setCursorPos(1,1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement