diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2009-06-09 11:29:37 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2009-06-09 11:29:37 +0000 |
commit | a3079e502b727ae10da87d68b43ab08d0941a705 (patch) | |
tree | b3638a03e3c986d4d6a3a3f758e4e2437998ebf7 /navit/transform.c | |
parent | 1bf9f363854c6f06a7aa0b7651bdae4effbc0090 (diff) | |
download | navit-a3079e502b727ae10da87d68b43ab08d0941a705.tar.gz |
Fix:Core:Use table instead of fixed value for scale calculation|Thanks odlg for the patch
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@2309 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/transform.c')
-rw-r--r-- | navit/transform.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/navit/transform.c b/navit/transform.c index c336e01f2..c1a97bb6b 100644 --- a/navit/transform.c +++ b/navit/transform.c @@ -868,6 +868,20 @@ transform_scale(int y) #ifdef AVOID_FLOAT static int tab_sqrt[]={14142,13379,12806,12364,12018,11741,11517,11333,11180,11051,10943,10850,10770,10701,10640,10587,10540,10499,10462,10429,10400,10373,10349,10327,10307,10289,10273,10257,10243,10231,10219,10208}; + +static int tab_int_step = 0x20000; +static int tab_int_scale[]={10000,10002,10008,10019,10033,10052,10076,10103,10135,10171,10212,10257,10306,10359,10417,10479,10546,10617,10693,10773,10858,10947,11041,11140,11243,11352,11465,11582,11705,11833,11965,12103,12246,12394,12547,12706,12870,13039,13214,13395,13581,13773,13971,14174,14384,14600,14822,15050,15285,15526,15774,16028,16289,16557,16832,17114,17404,17700,18005,18316,18636,18964,19299,19643,19995,20355,20724,21102,21489,21885,22290,22705,23129,23563,24007,24461,24926,25401,25886,26383,26891}; + +int transform_int_scale(int y) +{ + int a=tab_int_step,i,size = sizeof(tab_int_scale)/sizeof(int); + if (y < 0) + y=-y; + i=y/tab_int_step; + if (i >= size) + i=size-1; + return tab_int_scale[i]; +} #endif double @@ -880,7 +894,7 @@ transform_distance(enum projection pro, struct coord *c1, struct coord *c2) dy=c1->y-c2->y; return sqrt(dx*dx+dy*dy)/scale; #else - int dx,dy,f,scale=15539; + int dx,dy,f,scale=transform_int_scale((c1->y+c2->y)/2); dx=c1->x-c2->x; dy=c1->y-c2->y; if (dx < 0) |