cloud 248 Опубликовано: 19 августа, 2018 (изменено) Программка написанная на love2D рисует фракталы, ставя новую точку проходя определённое расстояние от предыдущей точки до случайно выбранной вершины предварительно нарисованной фигуры. Подробнее в этом видео. Как использовать: Запускаем, ставим мышью несколько точек, выбираем расстояние, которое будет проходить точка (начальная ставится случайно), пробел - пошагово, А - автоматически рисуем. Ну там в окошке есть инфо по управлению. По умолчанию расстояние 1/2, идеально для треугольника, для фигур с большим количеством точек лучше уменьшить. В общем играйтесь кому интересно, скачать скомпилированный вариант можно с гугл диска. 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 Изменено 19 августа, 2018 пользователем cloud 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах