diff --git a/js/common_functions.js b/js/common_functions.js index 0582804..a2a2e1d 100644 --- a/js/common_functions.js +++ b/js/common_functions.js @@ -615,75 +615,37 @@ function within_xy_range(observer,entity) return false; } -// function distance(a,b) // refactored in_check / removed it [07/05/22] -// { -// if(!a || !b) return 99999999; -// if('in' in a && 'in' in b && a['in']!=b['in']) return 99999999; -// if('map' in a && 'map' in b && a['map']!=b['map']) return 99999999; -// if(get_width(a) && get_width(b)) -// { -// var min_d=99999999,a_w=get_width(a),a_h=get_height(a),b_w=get_width(b),b_h=get_height(b),dist; -// // a_h*=0.75; b_h*=0.75; // This seems better, thanks to draw_circle REVISIT!! -// var a_x=get_x(a),a_y=get_y(a),b_x=get_x(b),b_y=get_y(b); -// // [{x:a_x-a_w/2,y:a_y},{x:a_x+a_w/2,y:a_y},{x:a_x+a_w/2,y:a_y-a_h},{x:a_x-a_w/2,y:a_y-a_h}].forEach(function(p1){ -// // [{x:b_x-b_w/2,y:b_y},{x:b_x+b_w/2,y:b_y},{x:b_x+b_w/2,y:b_y-b_h},{x:b_x-b_w/2,y:b_y-b_h}].forEach(function(p2){ -// // dist=simple_distance(p1,p2); -// // if(dist= (b_x - b_w2) - && (a_y) >= (b_y - b_h) - && (a_y - a_h) <= (b_y) ) return 0 + // Compute bounds of each rectangle + const aLeft = a_x - aHalfWidth; + const aRight = a_x + aHalfWidth; + const aTop = a_y - aHeight; + const aBottom = a_y; - // TODO: If one is just a single point, we're computing 8 needless calculations. - // Compare the 4 corners to each other - let min = 99999999 - for(const a_c of [{ x: a_x + a_w2, y: a_y - a_h}, - { x: a_x + a_w2, y: a_y}, - { x: a_x - a_w2, y: a_y - a_h}, - { x: a_x - a_w2, y: a_y}]) { - for(const b_c of [{ x: b_x + b_w2, y: b_y - b_h}, - { x: b_x + b_w2, y: b_y}, - { x: b_x - b_w2, y: b_y - b_h}, - { x: b_x - b_w2, y: b_y}]) { - const d = Math.hypot(a_c.x - b_c.x, a_c.y - b_c.y) - if(d < min) min = d - } - } - return min + const bLeft = b_x - bHalfWidth; + const bRight = b_x + bHalfWidth; + const bTop = b_y - bHeight; + const bBottom = b_y; + + const dx = Math.max(bLeft - aRight, aLeft - bRight, 0); + const dy = Math.max(bTop - aBottom, aTop - bBottom, 0); + + return Math.sqrt(dx * dx + dy * dy); } function random_away(x,y,R) // https://stackoverflow.com/a/5838055/914546