2017-10-03 13 views
0

私のプログラム内でこの関数を実行しようとすると、円(自分のx位置が長方形x位置に渡された後)が上の私はそれが意図したように、矩形の右端を跳ね返らずに返します。円は四角形の右上隅にくっついていきます


bounceOff: function(circle, rect) { 
    let distX = Math.abs(circle.x - rect.x - rect.w/2); 
    let distY = Math.abs(circle.y - rect.y - rect.h/2); 
    circle.dx = distX - rect.w/2; 
    circle.dy = distY - rect.h/2; 
    return (circle.dx * circle.dx + circle.dy * circle.dy <= (circle.r * circle.r)); 
} 
+2

ようこそStackOverflow!私たちがあなたのお手伝いをするために、あなたの質問を更新して**関連コード**を[**最小で、完全で、検証可能な例**]で表示することができますか?(http://stackoverflow.com/ヘルプ/ mcve)。あなたの問題を解決するためにあなたが持っているものを知ってもらうことができれば助けになるでしょう(http://meta.stackoverflow.com/questions/261592)。詳細については、[**よくある質問をどうやるか**](http://stackoverflow.com/help/how-to-ask)に関するヘルプ記事を参照して、サイトの[**ツアー** –

+0

''このプログラムを実行する ' - それは正直なところ、プログラムのほとんど役に立たない小さなスニペットです。 –

答えて

0

あなたは演算子の優先順位を確認する必要があります。例えば場合:次に

circle.x = 10; 
rect.x = 5; 
rect.w = 6; 

circle.x - rect.x - rect.w/2 

もたらすことができる:10 - 3 = 7

または - (5-6/2)= 10:(10 - 5) - ( 6/2)= 5 - 3 = 2

またはさらに:((10-5) - 6)/ 2 =±5

使用括弧:

let distX = Math.abs(circle.x - (rect.x - (rect.w/2))); 
let distY = Math.abs(circle.y - (rect.y - (rect.h/2))); 
+0

実際にはあなたのアプローチは、に、いくつかの目に見えないコーナーのように。 –

+0

はい、これはほんの一例にすぎず、演算子の優先順位を変更して(括弧を使用して)必要なものを説明します。 – SalmanAA

関連する問題