Jump to content

  • Log In with Google      Sign In   
  • Create Account

Surface Area of Circle... sort of


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 Mythics   Members   -  Reputation: 135

Like
0Likes
Like

Posted 09 March 2012 - 10:47 AM

Hello all,

I'm working on a top down 2D tile based game. I'm working on implementing lighting of a sort, but I'm only lighting entire tiles (either lit or not).


So, say I have a light source that should light all tiles within a radius of 1. That would end up lighting 5 tiles (it's own and those adjacent to it).

That's great and all, but the question arose to me, just how many tiles are going to be lit by using a specific light source (without iteration or implementing it).


Of course I started with just doing a typical calculation of circle surface area, but as an example, a radius of 1 would just result in Pi typically rather than 5.

Any suggestions on how I could implement a function that simply returns the number of tiles that would be lit when inputting a single number for radius? This can definitely ignore walls.

Thanks in advance,
Mythics

Sponsor:

#2 Cornstalks   Crossbones+   -  Reputation: 6991

Like
0Likes
Like

Posted 09 March 2012 - 11:18 AM

It becomes complicated by what distance method you're using. Without knowing this, it's impossible to even begin speculating on some function that does what you want.

To picture the complication I'm talking about, imagine doing a flood fill, starting at the where the light source is. If you want to do a flood fill, filling a region with a radius of 10, it all depends on how you calculate the radius. Do you do a 4-way flood fill, with each step costing 1? Do you do an 8-way flood fill, with each step costing 1? Do you do an 8-way flood fill with horizontal/vertical movements costing 1 and diagonal movements costing ~1.41 (sqrt(2))? Do you do a more "mathematically correct" flood fill and calculate each tile's distance to be the euclidian distance from the light source? The final result of how many tiles are lit all depends on what you mean by radius.
[ I was ninja'd 71 times before I stopped counting a long time ago ] [ f.k.a. MikeTacular ] [ My Blog ] [ SWFer: Gaplessly looped MP3s in your Flash games ]

#3 Mythics   Members   -  Reputation: 135

Like
0Likes
Like

Posted 09 March 2012 - 11:36 AM

It becomes complicated by what distance method you're using. Without knowing this, it's impossible to even begin speculating on some function that does what you want.


Ah, understood. Well, the function I typically use for distance is just Sqr((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2) which I believe is euclidean distance.

The kind of answers I would expect would be like these, where the first number is the radius used and the second number is how many tiles would be considered to be lit.


1 5
2 13
3 29
4 49
5 81
6 113
7 149
8 197
9 253
10 317


I already have a pretty solid process for lighting them and all, but I'd greatly appreciate a method of calculating how many COULD be lit prior to running the lighting code.

#4 Cornstalks   Crossbones+   -  Reputation: 6991

Like
0Likes
Like

Posted 09 March 2012 - 12:22 PM

As far as I know, there isn't a simple mathematical formula you can use to obtain the precise answer. The only ways I know are a) approximating the result with the area of the circle, b) precomputing a table and looking it up in the table (which means you'd have an upper limit on your light's radius), or c) performing a special type of flood fill and counting the number of tiles in the circle.
[ I was ninja'd 71 times before I stopped counting a long time ago ] [ f.k.a. MikeTacular ] [ My Blog ] [ SWFer: Gaplessly looped MP3s in your Flash games ]

#5 Álvaro   Crossbones+   -  Reputation: 13936

Like
2Likes
Like

Posted 09 March 2012 - 12:30 PM

This is called the Gauss circle problem.

#6 Mythics   Members   -  Reputation: 135

Like
0Likes
Like

Posted 09 March 2012 - 01:33 PM

This is called the Gauss circle problem.


Perfect, thank you very much.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS