[Freeciv-Dev] Re: (PR#4648) how to do wrapping in map_to_canvas_pos?
[Top] [All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
On Tue, 22 Jul 2003, Jason Short wrote:
> map_to_canvas_pos must first wrap the given map position relative to the
> mapview origin, then convert that to a canvas position.
>
> It is the wrapping that is tricky. The obvious logic is something like:
>
> if (map_x < map_view_x0) {
> map_x += map.xsize;
> }
>
> and this is basically what is currently used for both iso and non-iso
> views. But this isn't quite right for iso-view; for instance
> (map_view_x0,map_view_y0-2) will wrap to itself and will never be shown,
> no matter how large you make the window.
>
> When we allow north-south wrapping and iso-maps this becomes
> exponentially more complicated.
>
> One alternative is to do the wrapping explicitly, as is done above.
> Ross has written a function to do this for gen-topologies, called
> unnormalize_map_pos. It is very complicated. See the attached
> unnormalize_map_pos.c.
ugh, took me about 1/2 hour to digest it.
> Another alternative is to use map_distance_vector to find the
> representative position "closest" to the center of the mapview window,
> and use that position for the calculations. This means
> map_distance_vector must be able to deal with unreal positions, as
> map_to_canvas_pos does. See the attached map_to_canvas_pos.diff (this
> patch fixes the "not quite right" part of the current implementation).
I do not understand why map_center_[xy] should stay unnormalized?
Let them be normalized, it should work just as well. It would save you
from removing CHECK_MAP_POSs, although you can do that to save time.
G.
- [Freeciv-Dev] Re: (PR#4648) how to do wrapping in map_to_canvas_pos?,
Gregory Berkolaiko <=
[Freeciv-Dev] Re: (PR#4648) how to do wrapping in map_to_canvas_pos?, Gregory Berkolaiko, 2003/07/23
|
|