0

Javascript html5 キャンバスで作成された円があり、その円内に矢印キーで移動する小さな円を作成しました。小さな円が大きな円に触れたときを検出する方法を教えてもらえますか? 私はこのことにかなり慣れていません。

4

2 に答える 2

3

大きな円がbigX、bigY、bigRで記述され、小さな円がsmX、smY、smRで記述されていると仮定すると、大きな円の中心と小さな円の中心の間の距離は、最大で大きな半径から小さな半径を引いたものになる必要があります半径:

function isIn(bigX, bigY, bigR, smX, smY, smR) {
  var distSquared = (bigX - smX) * (bigX - smX) + (bigY - smY) * (bigY - smY);
  return (bigR - smR) * (bigR - smR) >= distSquared;
}

X、Y -> 円の中心の座標

R -> 円の半径

PS: 平方根は抽出しませんでした。通常は、代わりに乗算を行う方がはるかに高速だからです。

編集:明らかに、それらが接触しているかどうかを確認したい場合、距離は等しくなければなりません。

function isTouching(bigX, bigY, bigR, smX, smY, smR) {
  var distSquared = (bigX - smX) * (bigX - smX) + (bigY - smY) * (bigY - smY);
  return (bigR - smR) * (bigR - smR) == distSquared;
}

EDIT2: ケン - アブディアスのコメントに準拠:

浮動小数点の比較は予期せず失敗する可能性があるため、== 演算子の代わりに許容範囲を指定した比較関数を使用することをお勧めします。

function almostEqual (a, b, tolerance) {
  tolerance = tolerance != null ? tolerance : 0.000001;
  return Math.abs(a-b) <= tolerance;
}
于 2013-11-08T14:52:00.903 に答える
0

計算してみよう!これを行うための適切な暗号化された方法があるかどうかはわかりませんが、大きな (x1, y1) 円と小さな (x2, y2) 円の中心の座標と、小さな円、距離を比較するだけです

sqrt((x1-x2)^2 + (y1 - y2)^2) + (small radius) 

大きな半径まで、上記の式が大きな半径以上の場合、それらは接触しています:)

于 2013-11-08T14:55:06.393 に答える