]> git.mxchange.org Git - simgear.git/blobdiff - simgear/bucket/newbucket.cxx
Cygwin fixes.
[simgear.git] / simgear / bucket / newbucket.cxx
index 916485be70fd8e26d95d428fce4ca8645f11724e..e3c343879b7f6b0f84255354820786e11e86e720 100644 (file)
@@ -271,16 +271,32 @@ void sgBucketDiff( const SGBucket& b1, const SGBucket& b2, int *dx, int *dy ) {
 #endif
 
     // longitude difference
-    double c1_lon = b1.get_center_lon();
-    double c2_lon = b2.get_center_lon();
-    double diff_lon = c2_lon - c1_lon;
-    double span;
-    if ( sg_bucket_span(c1_lat) <= sg_bucket_span(c2_lat) ) {
+    double diff_lon=0.0;
+    double span=0.0;
+
+    SGBucket tmp_bucket;
+    // To handle crossing the bucket size boundary
+    //  we need to account for different size buckets.
+
+    if ( sg_bucket_span(c1_lat) <= sg_bucket_span(c2_lat) )
+    {
        span = sg_bucket_span(c1_lat);
     } else {
        span = sg_bucket_span(c2_lat);
     }
 
+    diff_lon = b2.get_center_lon() - b1.get_center_lon();
+
+    if (diff_lon <0.0)
+    {
+       diff_lon -= b1.get_width()*0.5 + b2.get_width()*0.5 - span;
+    } 
+    else
+    {
+       diff_lon += b1.get_width()*0.5 + b2.get_width()*0.5 - span;
+    }
+
+
 #ifdef HAVE_RINT
     *dx = (int)rint( diff_lon / span );
 #else