2

私は試験の練習をしていて、練習問題の 1 つをやっています。2 つの引数を取るメソッドがあります。1 つは円の半径用で、もう 1 つはその円内に配置するドットの数用です。方法は以下です。

private void drawDots(int radius, int numDots){
    double ycord;
    double xcord;
    for(int q = 0; q < numDots; q++){
        ycord = -radius + random()*(radius+radius+1);
        xcord = pow((pow(radius,2)-pow(ycord,2)),0.5);
        turt.moveTo(xcord,ycord);
        turt.penDown();
        turt.forward(0);
        turt.penUp();
    }
}

turtは描画に使用しているオブジェクトであり、penDown()/penUp()はそれぞれキャンバスにオブジェクトを配置および削除しています。

turtオブジェクトの x 座標と y 座標を半径内にとどめるように定義しようとしています。半径が100で、ドットの数が であると200します。オブジェクトをその半径内に保つにはどうすればよいでしょうか?

質問には次のように記載されています。

「ドットを半径 r の円に拘束するには、間隔 -r、r のランダムな y 座標が選択されます。次に、間隔 -b、b でランダムに x 座標が選択されます。ここで、b = sqrt(r^ 2 - y^2)」

この数学の意味を理解する方法がわかりません。上記のコードは私の最善の試みでしたが、出力は奇妙です。

失敗した出力は次のとおりです。

ここに画像の説明を入力

4

3 に答える 3

5

中心(0,0)からドットまでの距離は、円の半径 より小さくなければなりませんr。距離は で表すことができますsqrt(x² + y²)yしたがって、の間で座標をランダムに選択する場合、座標が前の方程式を尊重し[-r, r]ていることを確認する必要があるだけです。x

デモンストレーション

sqrt(x² + y²) < r
x² + y² < r²
x² < r² - y²
x < sqrt(r² - y²)
#

アルゴリズムは次のようになります。y 座標を選択したら、距離の制約を尊重する限り、x をランダムに選択できます。

private void drawDots(int radius, int numDots){
    double y;
    double x;
    double xMax;

    for (int q = 0; q < numDots; q++){
        // y is chosen randomly
        y = -radius + random() * (radius + radius + 1);

        // x must respect x² + y² < r²
        xMax = pow((pow(radius,2)-pow(ycord,2)), 0.5);
        x = random() * 2 * xMax - xMax;

        turt.moveTo(x, y);
        turt.penDown();
        turt.forward(0);
        turt.penUp();
    }
}
于 2013-10-28T08:24:07.900 に答える
1

現在、円の内側ではなく、円の上に点を描いています。それは、ガイドラインに正しく従っていないためです。

b = pow((pow(radius,2)-pow(ycord,2)),0.5); // this should be b
xcord = -b + random()*(b+b);
于 2013-10-28T08:21:37.107 に答える
1

random のドキュメントを参照してください。デフォルトでは、0 から 1 の間の数値が生成されることがわかります。

基本的にこれは、探している式が次のとおりであることを意味します: ycord=-radius+random()*(radius*2);

これにより、-radius と radius の間の y 軸上のポイントが得られます (random() が 0 を返す場合は -radius を取得し、1 を返す場合は -radius+(2*radius())=radius を取得します)。

x座標の計算は正しいですが、円上のx座標ポイントが得られます(bと呼びましょう)。b と -b の間の x 座標を選択するために、新しい乱数を使用したいと思われます。

于 2013-10-28T08:27:07.007 に答える