Code Doodles!

General discussion about LÖVE, Lua, game development, puns, and unicorns.
User avatar
Nixola
Inner party member
Posts: 1949
Joined: Tue Dec 06, 2011 7:11 pm
Location: Italy

Re: Code Doodles!

Post by Nixola »

There's a "maths" missing I fear
lf = love.filesystem
ls = love.sound
la = love.audio
lp = love.physics
lt = love.thread
li = love.image
lg = love.graphics
User avatar
slime
Solid Snayke
Posts: 3166
Joined: Mon Aug 23, 2010 6:45 am
Location: Nova Scotia, Canada
Contact:

Re: Code Doodles!

Post by slime »

Garmelon wrote:The same thing happens on my school's computers (kinda old :P) too - When I reduce the samples to 0 it works.
Apparently some Intel video drivers give back the Microsoft OpenGL 1.1 software renderer when an OpenGL context with 16x MSAA is requested.

I recommend using 8x MSAA at the most, and preferably 4x. There aren't many GPUs which support 16x MSAA, and as discovered by Nixola some drivers do unexpected things when you request it. The visual difference between 8x and 16x is very minimal anyway (and the performance difference can be large – when 16x is supported.)
Even 4x MSAA makes things look comparatively great, and it's the most-supported MSAA value across all GPUs.
User avatar
Garmelon
Prole
Posts: 19
Joined: Tue Jun 02, 2015 5:25 pm

Re: Code Doodles!

Post by Garmelon »

Nixola wrote:There's a "maths" missing I fear
Fixed in the original post, just download it again :D
User avatar
HugoBDesigner
Party member
Posts: 403
Joined: Mon Feb 24, 2014 6:54 pm
Location: Above the Pocket Dimension
Contact:

Re: Code Doodles!

Post by HugoBDesigner »

I was bored, while at the same time curious about Pi. I decided to "study" it by seeing which digits are more common on it. You can try it yourself with different amounts of digits to consider, from 1 to 999:

Download main.lua

Or code itself (relatively big, thus the uploaded file):

Code: Select all

function love.load()
	pi = "3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420198"
	piMin, piMax = 1, string.len(pi)-2
	love.window.setTitle("A study of Pi")
	font1 = love.graphics.newFont(12)
	font2 = love.graphics.newFont(8)
	love.graphics.setFont(font1)
	love.window.setMode(400, 300)
	love.graphics.setLineWidth(2)
	
	keyHold = {t = 0, rt = 0, mt = 1, mrt = .02}
	
	counter = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}
	piDigits = 1
end

function love.update(dt)
	local down = love.keyboard.isDown
	local rp = 0
	if down("up") or down("=") or down("kp+") or down("right") then
		rp = 1
	elseif down("down") or down("-") or down("kp-") or down("left") then
		rp = -1
	else
		keyHold.t = 0
		keyHold.rt = 0
	end
	
	if rp ~= 0 then
		keyHold.t = math.min(keyHold.t + dt, keyHold.mt)
		if keyHold.t == keyHold.mt then
			keyHold.rt = keyHold.rt+dt
			if keyHold.rt >= keyHold.mrt then
				keyHold.rt = 0
				piDigits = math.min(piMax, math.max(piMin, piDigits+rp))
				updatePi()
			end
		end
	end
end

function love.draw()
	love.graphics.setFont(font1)
	local font = love.graphics.getFont()
	love.graphics.setColor(255, 255, 255, 255)
	love.graphics.print("Digits: " .. piDigits, 3, 3)
	
	local more, less = 1, 1
	for i, v in ipairs(counter) do
		if v/piDigits <= counter[less]/piDigits then
			less = i
		end
		if v/piDigits >= counter[more]/piDigits then
			more = i
		end
	end
	
	love.graphics.setColor(255, 255, 255, 55)
	for i = 1, 10 do
		love.graphics.rectangle("fill", 5, 100+(i-1)*5, 400-10, 1)
	end
	
	local t = {}
	for i = 1, #counter+2 do
		local l = i-1
		local n = 0
		if l >= 1 and l <= #counter then
			n = counter[l]/counter[more]
		end
		table.insert(t, n)
	end
	for i = 2, #t do
		local x1, x2 = math.max(5, (i-2)*(400/11)), math.min(400-5, (i-1)*(400/11))
		local y1, y2 = (100+9*5) - t[i-1]*(9*5), (100+9*5) - t[i]*(9*5)
		
		if i < #t then
			love.graphics.setColor(255, 255, 255, 55)
			love.graphics.setLineWidth(2)
			if i-1 == more then
				love.graphics.setColor(155, 155, 255, 105)
				love.graphics.setLineWidth(4)
			elseif i-1 == less then
				love.graphics.setColor(255, 155, 155, 105)
				love.graphics.setLineWidth(4)
			end
			love.graphics.line(x2, y2, x2, 100+9*5)
		end
		
		love.graphics.setLineWidth(2)
		love.graphics.setColor(0, 105, 255, 255)
		love.graphics.line(x1, y1, x2, y2)
	end
	
	love.graphics.setLineWidth(2)
	for i, v in ipairs(counter) do
		love.graphics.setColor(255, 255, 255, 255)
		local x = (400/11)*i
		
		love.graphics.print(i-1, x-font:getWidth(i-1)/2, 20)
		
		love.graphics.setColor(255, 255, 255, 255)
		if i == less then
			love.graphics.setColor(255, 155, 155, 255)
		elseif i == more then
			love.graphics.setColor(155, 155, 255, 255)
		end
		love.graphics.rectangle("line", x-5, 40, 10, 50)
		
		love.graphics.setColor(0, 255, 0, 255)
		love.graphics.rectangle("fill", x-4, 40+50-48*(v/piDigits), 8, 48*(v/piDigits))
	end
	
	love.graphics.setFont(font2)
	local font = love.graphics.getFont()
	
	local t = {""}
	for i = 1, string.len(pi) do
		local s = string.sub(pi, i, i)
		if font:getWidth(t[#t] .. s) >= 400-10 then
			table.insert(t, "")
		end
		t[#t] = t[#t] .. s
	end
	
	local w = 0
	for i, v in ipairs(t) do
		if string.len(v)+w >= piDigits+2 and w < piDigits+2 then
			local s = {"", ""}
			s[1] = string.sub(v, 1, piDigits+2-w)
			s[2] = string.sub(v, piDigits+3-w, -1)
			love.graphics.setColor(255, 205, 0, 255)
			love.graphics.print(s[1], 5, 300-5-(#t*10)+(i-1)*10)
			love.graphics.setColor(255, 205, 0, 105)
			love.graphics.print(s[2], 5+font:getWidth(s[1]), 300-5-(#t*10)+(i-1)*10)
		else
			love.graphics.setColor(255, 205, 0, 255)
			if string.len(v)+w >= piDigits+2 then
				love.graphics.setColor(255, 205, 0, 105)
			end
			love.graphics.print(v, 5, 300-5-(#t*10)+(i-1)*10)
		end
		w = w + string.len(v)
	end
end

function love.keypressed(key)
	if key == "up" or key == "=" or key == "kp+" or key == "right" then
		piDigits = math.min(piMax, piDigits+1)
		updatePi()
	elseif key == "down" or key == "-" or key == "kp-" or key == "left" then
		piDigits = math.max(piMin, piDigits-1)
		updatePi()
	end
end

function love.mousepressed(x, y, button)
	if button == "wu" then
		piDigits = math.min(piMax, piDigits+1)
		updatePi()
	elseif button == "wd" then
		piDigits = math.max(piMin, piDigits-1)
		updatePi()
	end
end

function updatePi()
	counter = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
	for i = 3, 2+piDigits do
		local d = tonumber(string.sub(pi, i, i))
		counter[d+1] = counter[d+1] + 1
	end
end
And a screenie, because why not?

Image
@HugoBDesigner - Twitter
HugoBDesigner - Blog
User avatar
undef
Party member
Posts: 438
Joined: Mon Jun 10, 2013 3:09 pm
Location: Berlin
Contact:

Re: Code Doodles!

Post by undef »

Ah, nice idea.

Edit: This is wrong:
Although I can tell you that pi is a transcendental number.
That means that every possible number sequence can be found in the post comma digits of pi, and therefore the numbers are evenly distributed.
Last edited by undef on Fri Jul 31, 2015 9:18 pm, edited 1 time in total.
twitter | steam | indieDB

Check out quadrant on Steam!
User avatar
micha
Inner party member
Posts: 1083
Joined: Wed Sep 26, 2012 5:13 pm

Re: Code Doodles!

Post by micha »

undef wrote:Ah, nice idea.
Although I can tell you that pi is a transcendental number.
That means that every possible number sequence can be found in the post comma digits of pi, and therefore the numbers are evenly distributed.
Sorry for the nit-picking, but this reasoning is not correct. You can make a transcendental number consisting only of the digits 0 and 1. Therefore not every possible number sequence appears in every transcendental number.

The statements (1) that every possible number can be found inside pi and (2) that the digits are evenly distributed in pi might still be true. I am not sure about that.
User avatar
DaedalusYoung
Party member
Posts: 413
Joined: Sun Jul 14, 2013 8:04 pm

Re: Code Doodles!

Post by DaedalusYoung »

micha wrote:The statements (1) that every possible number can be found inside pi and (2) that the digits are evenly distributed in pi might still be true. I am not sure about that.
There are an infinite number of digits, so every number will appear an infinite amount of times, so yeah, that should be true.
User avatar
micha
Inner party member
Posts: 1083
Joined: Wed Sep 26, 2012 5:13 pm

Re: Code Doodles!

Post by micha »

DaedalusYoung wrote:There are an infinite number of digits, so every number will appear an infinite amount of times, so yeah, that should be true.
I know this is very off-topic, but this reasoning is again incorrect. We maybe know the first millions of digits of pi and we can see that all observed digits are approximately uniformly distributed. That is strong evidence but no proof that this pattern will continue indefinitely.

Further more, knowing that all numbers appear an infinite amount of times, does not mean that they all appear equally often.

But of course, there is good reason to believe that all the digits are uniformly distributed.
User avatar
zorg
Party member
Posts: 3468
Joined: Thu Dec 13, 2012 2:55 pm
Location: Absurdistan, Hungary
Contact:

Re: Code Doodles!

Post by zorg »

We do know that pi is transcendental, that only means that no rational a/b number equals it;
But according to wikipedia, we don't yet know whether pi is a Normal Number or not, meaning that the infinite digits in any base would be uniformly distributed or not.
Me and my stuff :3True Neutral Aspirant. Why, yes, i do indeed enjoy sarcastically correcting others when they make the most blatant of spelling mistakes. No bullying or trolling the innocent tho.
User avatar
undef
Party member
Posts: 438
Joined: Mon Jun 10, 2013 3:09 pm
Location: Berlin
Contact:

Re: Code Doodles!

Post by undef »

micha wrote:
undef wrote:snip.
Sorry for the nit-picking, but this reasoning is not correct. You can make a transcendental number consisting only of the digits 0 and 1. Therefore not every possible number sequence appears in every transcendental number.

The statements (1) that every possible number can be found inside pi and (2) that the digits are evenly distributed in pi might still be true. I am not sure about that.
Oops sorry, my bad, I was wrong.
Learned something new again :)
(Would like someone to prove that pi is a normal number now...)
twitter | steam | indieDB

Check out quadrant on Steam!
Post Reply

Who is online

Users browsing this forum: No registered users and 9 guests