Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java用随机角度获取坐标_Java - Fatal编程技术网

java用随机角度获取坐标

java用随机角度获取坐标,java,Java,我正在写一个程序,点击JPanel,然后一个圆将产生,然后它的x&y将增加10像素每帧。以下两行暂时用于确定圆繁殖后的下一步 destinationX = -10 + (int)(Math.random() * ((10 - (-10)) + 1)); destinationY = -10 + (int)(Math.random() * ((10 - (-10)) + 1)); 上述代码不是确定cirlce第二步位置的最佳代码。我想应用一种方法,使可能性更加均匀。下面是我要做的

我正在写一个程序,点击JPanel,然后一个圆将产生,然后它的x&y将增加10像素每帧。以下两行暂时用于确定圆繁殖后的下一步

    destinationX = -10 + (int)(Math.random() * ((10 - (-10)) + 1));
    destinationY = -10 + (int)(Math.random() * ((10 - (-10)) + 1));
上述代码不是确定cirlce第二步位置的最佳代码。我想应用一种方法,使可能性更加均匀。下面是我要做的事情

           x2,y2     
             /
            /
           /
          /
         /
      h /
       /
      / a
      ----------------------------
   x1,y1

x1,y2是已知的,a是随机360度,h是10,如何计算x2,y2?

你熟悉三角学吗?您已经绘制了一个直角三角形,以
h
作为斜边,
a
作为所讨论的角度,一条假想的腿与角度相对(
opp
),一条腿与角度相邻(
adj
)。以下是更新的图表:

           x2,y2     
             /|
            / |
           /  |
          /   |
         /    | opp
      h /     |
       /      |
      / a     |
      ---------
   x1,y1  adj
三角学定义了一个函数
正弦(
sin
)作为
opp/h
和类似的函数
余弦(
cos
)为
adj/h

在您的情况下,您需要计算
x2=x1+adj

由于cos(a)=adj/h,
adj=h*cos(a)
;因此,通过替换,我们得到了
x2=x1+h*cos(a)

我们可以对
y2
进行类似的推导,得到
y2=y1+h*sin(a)

如果要在随机方向上移动固定数量的点,则需要
Math.sin
Math.cos

double angle = Math.toRadians(Math.random() * 360);
double amount = 10;
int x2 = x1 + (int)(amount * Math.cos(angle));
int y2 = y1 + (int)(amount * Math.sin(angle));
为什么不{angle=Math.random()*2*Math.PI;}?