Перейти к публикации

В ближайшее время постараюсь разобраться с картой сервера/ЛК/бб кодами

Внимание, с 14 февраля до 20 февраля могут проходить работы на сервере, где также находится лаунчсервер. В связи с этим авторизация в лаунчере может не работать

cloud

Рисуем фракталы на Love

Рекомендованные сообщения

  Программка написанная на love2D рисует фракталы, ставя новую точку проходя определённое расстояние от предыдущей точки до случайно выбранной вершины предварительно нарисованной фигуры.

   Подробнее в этом видео.

   Как использовать:

Запускаем, ставим мышью несколько точек, выбираем расстояние, которое будет проходить точка (начальная ставится случайно), пробел - пошагово, А - автоматически рисуем. Ну там в окошке есть инфо по управлению.

   По умолчанию расстояние 1/2, идеально для треугольника, для  фигур с большим количеством точек лучше уменьшить. 

   В общем играйтесь кому интересно, скачать скомпилированный вариант можно с гугл диска.

      eAO7wqqCxJoGRA.png

 

io.stdout:setvbuf("no")

local windowHeight
local windowWidth
local fullscreen = false

local tab = {}
local uptime = 0
local iter = 0
local showInfo = true
local stepMode = true
local speed = 1
local dist = 2

local f = {}
local t = {}

local function drawPoint(cor)
  love.graphics.points(cor[1], cor[2])
end

local function newPoint()
  if #f >= 2 then
    local r = love.math.random(1, #f)
    t[1] = f[r][1]+(t[1]-f[r][1])/dist 
    t[2] = f[r][2]+(t[2]-f[r][2])/dist 
    tab[t[1]] = t[2]
    iter = iter + 1
    return t
  end
end

function love.mousereleased(x, y, button)
   if button == 1 then
      f[#f+1] = {x, y}
   end
end

function love.keyreleased(key)
  if key ~= nil then print(key) end
  if key == "h" then
    showInfo = not showInfo
  elseif key == "r" then
    tab = {}
    t ={love.math.random(10, windowHeight - 10), love.math.random(10, windowWidth - 10)}
    f ={}
    iter = 0
    stepMode = true
  elseif key == "a" then
    stepMode = false
  elseif key == "kp-" then
    if speed > 1 then speed = speed / 2 end
  elseif key == "kp+" then
      speed = speed * 2
  elseif key == "pageup" then
    if dist > 1 then dist = dist - 0.1 end
  elseif key == "pagedown" then
      if dist <= 5 then dist = dist + 0.1 end
  elseif key == "space" then
    stepMode = true
    newPoint(t)
  elseif key == "f" then
    fullscreen = not fullscreen
  end
end


function love.load()
  love.window.setTitle("Fractals Random Generator_v1")
  love.window.setFullscreen(fullscreen, "desktop")
  print(windowHeight, windowWidth)
  windowHeight = love.graphics.getHeight()
  windowWidth = love.graphics.getWidth()
  t ={love.math.random(10, windowWidth - 10), love.math.random(10, windowHeight - 10)}
end


function love.update(dt)
  love.window.setFullscreen(fullscreen, "desktop")
  windowHeight = love.graphics.getHeight()
  windowWidth = love.graphics.getWidth()
  if not stepMode then
    for i=1, speed do
      newPoint(t)
    end
  end
  uptime = uptime + dt
  love.keyreleased()
  love.mousereleased()
end


function love.draw()
  love.graphics.setColor(0.5, 0.5, 1)
  for i=1, #f do 
    drawPoint(f[i])
  end
  
  for k,v in pairs(tab) do
    love.graphics.points(k,v)
  end
  if showInfo then
    love.graphics.setColor(1, 1, 0.2)
    for i=1, #f do
      --love.graphics.print("P"..i, f[i][1], f[i][2])
      love.graphics.circle("fill", f[i][1], f[i][2], 2)
    end

    love.graphics.print("FPS: "..love.timer.getFPS(), 10, 10)
    love.graphics.print("Time: " .. uptime, 10, 25)
    love.graphics.print("Points: " .. iter, 10, 40)
    love.graphics.print("distance: 1/".. dist, 10, 55)
    love.graphics.print("speed: ".. speed, 10, 70)

    love.graphics.print("'SPACE' - next step", 10, windowHeight - 80)
    love.graphics.print("'A' - auto draw", 10, windowHeight - 65)
    love.graphics.print("'R'- reset", 10, windowHeight - 50)
    love.graphics.print("'F' - fullscreen", 10, windowHeight - 35)
    
    love.graphics.print("'pgUp/pgDown' - change distance to top of the figure.", 150, windowHeight - 20)
    love.graphics.print("'-/+' - change speed.", 150, windowHeight - 35)

    love.graphics.print("Point", t[1], t[2])
  end
  love.graphics.setColor(1, 1, 0.2)
  love.graphics.print("'H'- show/hide info", 10, windowHeight - 20)
end
 

 

 

Изменено пользователем cloud
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×