2012-07-16 93 views
-3

我假设距离我的意思是半径,所以另一种表述方式是“如何给定半径的圆周上的随机点,同样给定圆心点”。如何计算与另一点距离固定的随机点?

我不明白减价。这是一个简单的C#问题,需要一个简单的C#答案,下面由Daniel DiPaolo充分提供。

通过改善问题或提供答案,减价和相关评论都没有帮助。

+3

这与C#有什么关系? – CodingGorilla 2012-07-16 16:06:40

+1

这是一个几何问题。为什么用C#标记?为什么它在这里? – 2012-07-16 16:07:15

回答

6

如果你的中心和半径是固定的,那么真正唯一不同的是角度。所以,只需计算0到360度(或0和2π弧度)之间的一个随机角度,然后使用极坐标转换得到x-y坐标。

x = r × cos(θ) 
y = r x sin(θ) 

添加你的中心的x,y坐标作为偏移量,并且你有你的坐标。

7

计算一个随机角度,然后使用角度和距离作为第一个点的极坐标偏移量。

0

算法代码

鉴于圆{[0,0],1} - {中心,半径}

  1. X =>获取随机数x从[-1,1]
  2. Y +Y- =>随机选择(例如0或1)为正或负y季度
  3. ÿ =>获取垂直线X = X1的相交点(来自步骤1)和圆,(来自步骤2)

NB这是可以做到的简单,选择正或负四分之一更快,更通过使用角度均匀分布,请参阅其他答案。

如果有人试图使用它,我的算法的问题是由于圆形的弯曲形状,接近X=r+X=r-的点将比接近X=0的点拾取得更少。查看@Servy的评论。

+0

这不会导致圆上的每个点具有相同的概率。更接近x = 0的点比x = radius附近的点更可能。不仅更容易选择一个角度,而且确保了相等的概率也更简单。 – Servy 2012-07-16 16:24:25

+0

@你可以解释一下为什么靠近'X = 0'的点比'X = r'更可能发生吗? – oleksii 2012-07-16 16:27:32

+1

沿着x轴,x = r附近的点比x = 0更密集。这样想,而不是一个完美的圆,想象你只是有一个多边形,说100边。以右上角为准。从每个点向下绘制一条直线到X轴。您会注意到左侧的线条较不密集,右侧的线条较为密集。随着您增加多边形上的点数,该属性将保持不变(甚至达到无穷大,这是一个圆圈)。 – Servy 2012-07-16 16:32:29

相关问题