1

私は、4 つの壁と 10 個のボールそれぞれの衝突をテストする単純な Java アプリケーションを持っています。このセグメントをプログラムの残りの部分と一緒に実行すると、10 個の非常に不安定な円 (互いに衝突しているように見える) が表示され、それらはまったく動きません。このセグメントを取り出すと、スムーズに移動して 4 つの壁から衝突する 10 個の円が得られます。誰かが問題の原因を教えてもらえますか? ありがとう

for (int j = 0; j < ballnum; ++j) {
    for (int k = 0; k < ballnum; ++k) {
        if (Math.sqrt((Math.pow(balls[j].givebackpoint().x - balls[k].givebackpoint().x, 2))
            + (Math.sqrt(Math.pow(balls[j].givebackpoint().y - balls[k].givebackpoint().y, 2)))) <= 2 * RADIUS) {
            if (balls[j].givebackangle() >= 180) {
                balls[j].setangle(balls[j].givebackangle()-180);
                                        }
            else{
                balls[j].setangle(360-balls[j].givebackangle());
                }
            }
        }
    }
4

2 に答える 2

2

私が見逃していない限り、あなたは where をスキップしていないようですj == k。ですから、彼らが自分自身と衝突しているというあなたは正しいです。

于 2012-09-02T04:56:51.637 に答える
2

各ボールをそれ自体と照合しています。

j == k の場合、内側の for ループの先頭に次のような行を追加して、テストの実行をスキップする必要があります。

if (j == k)
    continue;
于 2012-09-02T04:56:57.580 に答える