对于我正在制作的简单粒子系统,我需要给出一个宽度和高度的椭圆,计算一个位于该椭圆中的随机点X,Y.
现在我不是数学方面最好的,所以我想在这里询问是否有人能指出我正确的方向.
也许正确的方法是选择宽度范围内的随机浮点数,将其取为X并从中计算Y值?
我想知道如何生成出现在循环分布中的随机数.
我能够在矩形分布中生成随机点,使得点在(0 <= x <1000,0 <= y <1000)的平方内生成:
我将如何继续在一个圆圈内生成点,以便:
(x-500)^ 2 +(y-500)^ 2 <250000?
我需要为我的宠物射线追踪器生成随机值的算法进行澄清.
我从一个点发射光线.我有这些光线分布的问题:我需要分布均匀,但它不是......
我现在面临的问题是,在我对结果空间的扭曲之后,最初的均匀分布是不均匀的.
因此,例如,如果极坐标系我生成r和t角.分布不均匀且不均匀:靠近每个极点的空间比靠近赤道的结果密度大得多.原因很清楚:我将均匀分布的点从圆柱空间转换为球形.而且我扭曲了结果.同样的问题是如果我规范化立方体中随机生成的点.
我现在的想法是这样的:我想创建一个四面体,对其顶点进行标准化,将每个面(三角形)与中间的点分开,对其进行标准化并递归重复,直到我有足够的点.然后我稍微"扭曲"这些点.然后我再次将它们标准化.而已.
据我所知,这种方法本身并不是纯粹的数学蒙特卡罗方法,因为除了最后一步之外,我不会在任何步骤中使用随机分布.我不喜欢这种复杂性的解决方案.
任何人都可以建议更简单但仍然
谢谢!
编辑:
我需要一个快速的方法,而不仅仅是正确的方法.这就是我问蒙特卡罗的原因.提供的答案是正确的,但不是很快.四面体的方法很快,但不是很"随机"=>不正确.
我真的需要一些更合适的东西.
我已经搜索了类似于这个问题的一些问题,但没有一个问题我遇到了同样的问题.我有一个单位的地图,1000x1000单位,把它想象成像素.问题是我必须将圆形均匀地分布到1000x1000地图中,所有我想到的就是这样:
$quadrant = array_search(min($quadrants), $quadrants); // the quadrant with less points
$radius = (current_points_number / sqrt(pi() / $points_density);
$angle = pi() * mt_rand() / 2 / mt_getrandmax();
$x = round((($quadrant == 2 || $quadrant == 3) ? -1 : 1) * cos($angle) * $radius + 500);
$y = round((($quadrant == 3 || $quadrant == 4) ? -1 : 1) * sin($angle) * $radius + 500);
Run Code Online (Sandbox Code Playgroud)
正如你在下一张图片中看到的那样,这个实际算法的结果是一个问题,因为它倾向于使点更密集于圆的中心并广泛分散在它的边缘.

任何建议都将受到高度赞赏.
给定2D均匀变量如所讨论的,我们可以产生在一个单元盘的均匀分布在这里.
我的问题是在我希望均匀地采样两个相交的盘的交叉区域相似,其中一个磁盘总是单元盘和另一个可自由移动和调整大小等在这里
我试图将该区域分成两个区域(如上所述),并根据受尊重的磁盘对每个区域进行单独采样.我的方法基于上面引用的统一磁盘算法.为了对中心线右边的第一个区域进行采样,我将θ限制在两个交叉点内.接下来需要根据θ进行投影,以便将点推到我们的中线和磁盘半径之间的区域.python示例代码可以在这里找到.
u = unifrom2D()
A;B; // Intersection points
for p in allPoints
theta = u.x * (getTheta(A) - getTheta(B)) + getTheta(B)
r = sqrt(u.y + (1- u.y)*length2(lineIntersection(theta)))
p = (r * cos(theta), r * sin(theta))
Run Code Online (Sandbox Code Playgroud)
然而,这种方法相当昂贵,并且进一步无法保持均匀性.只是为了澄清我不想使用拒绝抽样.
您好我想问一个问题如何在matlab中制作一个圆圈并标记其中心并在其中生成一定数量的随机点,例如50?我知道这个代码来制作一个圆圈
x = linspace(-sqrt(10),sqrt(10));
y1 = sqrt(10-x.^2);
y2 = -sqrt(10-x.^2);
plot(x,y1,x,y2)
axis equal
hold on
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在其中生成50个随机点然后我想到了这个伪代码,但我不知道如何在matlab中编写它
01: FOR all nodes j
02: FOR all nodes i except node j
03: IF distance(j to center) < distance(j to i) AND
04: distance(i to cell center) < distance(j to i)
05: THEN there's a red link from node i to node j
06: ELSEIF distance(j to cell center) < distance(j to i)
07: THEN there's a blue link from node i to …Run Code Online (Sandbox Code Playgroud) 如何获得随机地理点[lat/long in decimal],放置在100米半径范围内的任何位置?圆的中心是另一个参考GeoPoint.有没有实现这个的函数/公式?
基本上我正在阅读我的Android设备的GPS输入,需要在设备周围生成随机的地理点[在我的设备中心的半径100米的圆圈].
请注意:数据库中没有预先存储的地理点.如上所述,我需要动态创建所有地理点.
我正在尝试在半圆内均匀地生成一组点。
size = 1000
t = np.random.random(size)*np.pi*2
u = np.random.random(size) + np.random.random(size)
r = np.where(u > 1, 2 - u, u)
x = r*cos(t)
y = r*sin(t)
coor = (x,y)
for idx, value in enumerate(y):
if value<0:
x[idx]=-3
y[idx]=-3
f, ax = plt.subplots(figsize = (3,3))
plt.scatter(x, y)
Run Code Online (Sandbox Code Playgroud)
这段代码有2个错误。
下图所示的位置不一致,因为这些点比其他点更重心。
如下所示的另一个图可以看作是统一的。
任何解决错误的想法将不胜感激。
geometry ×4
math ×4
random ×4
point ×2
python ×2
3d ×1
algorithm ×1
distribution ×1
geocoding ×1
geolocation ×1
gps ×1
matlab ×1
montecarlo ×1
numpy ×1
php ×1
probability ×1
r ×1
trigonometry ×1