用于绘图的画布是一个圆圈; 画布中的随机点

gat*_*tor 2 java math

我正在练习考试,我正在做一个练习题.我有一个方法,它有两个参数:一个用于圆的半径,另一个用于放置在该圆内的点数.方法如下:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

turt是我用来绘制的对象,和penDown()/分别penUp()放置和从画布中删除对象.

我正在尝试定义对象的x坐标和y坐标turt以保持在半径内.假设半径是100,并且点的数量是200,如何将对象保持在该半径范围内?

问题表明:

"为了将点保持为半径为r的圆,在间隔-r中选择随机y坐标,选择r.然后在间隔-b,b中随机选择x-coord,其中b = sqrt(r ^ 2 - y ^ 2)."

我只是不确定如何理解这个数学.上面的代码是我最好的尝试,但输出很奇怪.

这是我失败的输出:

在此输入图像描述

Aur*_*bon 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²)
#
Run Code Online (Sandbox Code Playgroud)

您的算法应如下所示.选择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();
    }
}
Run Code Online (Sandbox Code Playgroud)