我正在写一个程序,在一个圆内打印100个随机坐标。这个圆的半径为10,圆心位于(0,0)。但是,当我使用以下命令时,一些坐标y:value计算错误:y = Math.sqrt(100 -x^2)结果像off...为什么会这样?(见图)对于正的y:值,它们有时会变得太大,这是因为math.sqrt计算中使用了双精度。
package RKap14;
import ZindansMethods.ZindanRandom;
public class Dot {
public double x;
public double y;
public static void main(String[] arg)throws Exception {
//Create the array with null fields?
Coord[] c;
//Decide how many fields
c = new Coord[100];
//Create an object of class Coord in each slot of the array
for(int i = 0; i<c.length; i++) {
c[i] = new Coord();
}
//Assign random coordinates for each field x & y
for(int i = 0; i<c.length; i++) {
c[i].x = ZindanRandom.randomized(-10,10);
//Since sometimes Java calculates wrong and gives numbers above 10 and below -10...
while(c[i].x > 10 || c[i].x < -10)
c[i].x = ZindanRandom.randomized(-10,10);
c[i].y = ZindanRandom.randomized(-Math.sqrt(100-c[i].x*c[i].x), Math.sqrt(100-c[i].x*c[i].x));
}
//Print out the coordinates in form: (x,y),(x1,y1)...(x99,y99)
for (int i = 0; i<c.length; i++) {
System.out.print("(" + c[i].x + "," + c[i].y + ")" + ",");
}
}
}
class Coord {
double x;
double y;
}
我使用的随机方法:
//Gives random number a to b. For example -10 <= x <= 10
public static double randomized (double a, double b) {
return (a-1+Math.random()*Math.abs(b-a+1)+1);
}
我不知道该怎么做。我试着用三角法来做这个程序,但我更想知道为什么计算器的工作不正确。是小数太多了吗?我能做点什么吗?
Circle test
1条答案
按热度按时间uemypmqf1#
随机函数生成的数字超出了给定范围
例如,如果将值代入等式和,并使用1作为Math.random()返回的值,则将得到101。
请尝试以下随机函数: