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