Complete.Org: Mailing Lists: Archives: freeciv-dev: March 2004:
[Freeciv-Dev] Re: (PR#7350) Map radius change with city size
Home

[Freeciv-Dev] Re: (PR#7350) Map radius change with city size

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: remi.bonnet@xxxxxxxxxxx
Subject: [Freeciv-Dev] Re: (PR#7350) Map radius change with city size
From: "Vasco Alexandre da Silva Costa" <vasc@xxxxxxxxxxxxxx>
Date: Wed, 31 Mar 2004 18:32:54 -0800
Reply-to: rt@xxxxxxxxxxx

<URL: http://rt.freeciv.org/Ticket/Display.html?id=7350 >


Aren't you exagerating just a little bit? This may be O(R^4), but R=2.

Anyway, this looks a lot like a bunch of circle drawings, until you get
a full circumference. This should be interesting:
http://www.cs.umbc.edu/~rheingan/435/pages/res/gen-3.Circles-single-page-0.html[A

---
Vasco Alexandre da Silva Costa @ Instituto Superior Tecnico, Lisboa

On Wed, 31 Mar 2004, rwetmore@xxxxxxxxxxxx wrote:

>
> <URL: http://rt.freeciv.org/Ticket/Display.html?id=7350 >
>
>
> This is an attrocious algorithm and the excuses should
> be gut wrenching enough to force one to use a little
> brain power to fix it ...
>
> Why people think looping over every world possibiity to
> do a test in an inner loop for something that can be evaluated
> by a little pre-thought to use a *slightly* more efficient
> order of evaluation, is some sort of "good" programming
> style, and *never* losing a chance to try and slow down
> the code, is something I will never understand.
>
> Use brainpower to reorder the loops and document the process.
> Leave this behind as a comment if you want to show off poor
> programming skills that were avoided or whatever your rationale
> for this code is.
>
> Cheers
> RossW
> =====
>
> Jason Short wrote:
> > <URL: http://rt.freeciv.org/Ticket/Display.html?id=7350 >
> >
> > I think the generation of the indices is more complicated than it needs
> > to be.
> >
> > I think this implementation should work:
> >
> >   int dist, count = 0;
> >
> >   for (dist = 0; dist <= CITY_MAP_RADIUS * CITY_MAP_RADIUS + 2; dist++) {
> >     for (x = 0; x < CITY_MAP_SIZE; x++) {
> >       for (y = 0; y < CITY_MAP_SIZE; y++) {
> >         int dx = (x - CITY_MAP_RADIUS);
> >         int dy = (y - CITY_MAP_RADIUS);
> >
> >         if (dx * dx + dy * dy == dist) {
> >           indices[count].x = x;
> >           indices[count].y = y;
> >           count++;
> >         }
> >       }
> >     }
> >   }
> >
> > This is O(R^4), where R = CITY_MAP_RADIUS (or max city radius).  This is
> > quite acceptable as a one-time cost.
> >
> > jason
>
>
>
>




[Prev in Thread] Current Thread [Next in Thread]