2017-02-26 5 views
2

2つの重なっている要素を確認するためにこの関数を書いた
(長方形です)、
下の最初の図に示すとおりです。javascriptを使用して重複する円の要素をチェックする関数ですか?

問題は、私は円形elelemtsを使用したい、 以下の2番目の図に示すように。

だから、私は は、任意のヘルプをお願い申し上げ、一部にMath.PIと半径の計算を追加する必要があると思います...


          
  
 var checkOverlap = function (a, b) { 
 
      if (
 
       ((a.left < b.left && a.left + a.width > b.left) || 
 
       (a.left > b.left && a.left + a.width < b.left + b.width) || 
 
       (a.left > b.left && a.left + a.width > b.left + b.width)) && 
 
       ((a.top < b.top && a.top + a.height > b.top) || 
 
       (a.top > b.top && a.top + a.height > b.top) || 
 
       (a.top > b.top && a.top < b.top + b.height)) && 
 
       (a.left < b.left + b.width) && 
 
       (a.top < b.top + b.height) 
 
      ) { 
 
       return true; 
 
      } 
 
     };

enter image description here enter image description here

答えて

2

二つのディスクが場合にのみ距離交差しますそれらの中心間の距離はそれらの半径の和を超えない。

平面上の2点の座標が(x1, y1)(x2, y2)の場合、それらの間の距離は(x1 - x2)^2 + (y1 - y2)^2の平方根です。

こちらからお持ち帰りください。

+0

右:

あなたは楕円を扱っていないと仮定すると、あなただけのそれらの中心(Pythagoras theorem)の間の距離がその半径の和よりも小さい場合、計算する必要があります。 –

1

円が重なっていないかどうかをチェックするのは、同様のチェックを長方形で行うよりも簡単です。ありがとう、お金の

// long argument names to be more descriptive 

function checkIfCirclesOverlap(circle1CenterX, circle1CenterY, circle1Radius, circle2CenterX, circle2CenterY, circle2Radius) { 
    const xDistance = circle1CenterX - circle2CenterX; 
    const yDistance = circle1CenterY - circle2CenterY; 
    const distance = Math.sqrt(xDistance * xDistance + yDistance * yDistance); 
    return distance < circle1Radius + circle2Radius; 
} 
+0

おそらくそれは*以下になるはずです。距離が半径の合計に等しい場合、まだ交点の1つの点があります。 – avysk

+0

うん、それは実際には要件に依存している - 私は何かが接触したり、重複して起こるかどうかわからない。 –

関連する問題