我正在练习考试,我正在做一个练习题.我有一个方法,它有两个参数:一个用于圆的半径,另一个用于放置在该圆内的点数.方法如下:
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)."
我只是不确定如何理解这个数学.上面的代码是我最好的尝试,但输出很奇怪.
这是我失败的输出:

从中心(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)