Complete.Org: Mailing Lists: Archives: freeciv-dev: November 2001:
[Freeciv-Dev] Re: [PATCH] base_real_map_distance (PR#1049)
Home

[Freeciv-Dev] Re: [PATCH] base_real_map_distance (PR#1049)

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: jdorje@xxxxxxxxxxxxxxxxxxxxx
Cc: freeciv-dev@xxxxxxxxxxx, bugs@xxxxxxxxxxxxxxxxxxx
Subject: [Freeciv-Dev] Re: [PATCH] base_real_map_distance (PR#1049)
From: Raimar Falke <hawk@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 1 Nov 2001 20:26:54 +0100
Reply-to: rf13@xxxxxxxxxxxxxxxxxxxxxx

On Thu, Nov 01, 2001 at 06:26:48AM -0800, jdorje@xxxxxxxxxxxxxxxxxxxxx wrote:
> This patch introduces a new topology function,
> base_real_map_distance().  It performs a similar function to
> real_map_distance, but also finds a distance vector from the source to
> the destination coordinate pair.  It also replaces xdist and ydist.
> 
> A function like this is absolutely essential for iso-rectangular
> topologies.  xdist() and ydist() will not work because you cannot find
> the distance along one coordinate axis independently of the other.
> 

> +  /* We assume base_real_map_distance gives us the vector with
> +     the minimum squared distance.  Right now this is true. */

> +  /* We assume base_real_map_distance gives us the vector with
> +     the minimum map distance.  Right now this is true. */

> +Topology function to find the minimum "real" distance between positions
> +(x0, y0) and (x1, y1).  We find not only the distance but the vector

The two comments indicate that the semantics and the description of
base_real_map_distance could change. Why?

>  {
>    int diff_x, diff_y, dx, dy, scalar_product;
>  
> -  if (dest_x > src_x) {
> -    diff_x = dest_x - src_x < map.xsize / 2 ? 1 : -1;
> -  } else if (dest_x < src_x) {
> -    diff_x = src_x - dest_x < map.xsize / 2 ? -1 : 1;
> -  } else {                   /* dest_x == src_x */
> -    diff_x = 0;
> -  }
> -  if (dest_y != src_y)
> -    diff_y = dest_y > src_y ? 1 : -1;
> -  else
> -    diff_y = 0;
> +  base_real_map_distance(&diff_x, &diff_y, src_x, src_y, dest_x, dest_y);

This looks wrong. Value range of old diff_[xy] was {-1,0,1}.

        Raimar

-- 
 email: rf13@xxxxxxxxxxxxxxxxx
 1 + 1 = 3, for large values of 1


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