相关疑难解决方法(0)

算法:计算椭圆内的伪随机点

对于我正在制作的简单粒子系统,我需要给出一个宽度和高度的椭圆,计算一个位于该椭圆中的随机点X,Y.

现在我不是数学方面最好的,所以我想在这里询问是否有人能指出我正确的方向.

也许正确的方法是选择宽度范围内的随机浮点数,将其取为X并从中计算Y值?

algorithm math geometry

16
推荐指数
3
解决办法
7294
查看次数

如何在循环分布中生成随机点

我想知道如何生成出现在循环分布中的随机数.

我能够在矩形分布中生成随机点,使得点在(0 <= x <1000,0 <= y <1000)的平方内生成:

我将如何继续在一个圆圈内生成点,以便:

(x-500)^ 2 +(y-500)^ 2 <250000?

python distribution point

11
推荐指数
3
解决办法
1万
查看次数

单位球面上的均匀随机(Monte-Carlo)分布

我需要为我的宠物射线追踪器生成随机值的算法进行澄清.
我从一个点发射光线.我有这些光线分布的问题:我需要分布均匀,但它不是......

我现在面临的问题是,在我对结果空间的扭曲之后,最初的均匀分布是不均匀的.

因此,例如,如果极坐标系我生成r和t角.分布不均匀且不均匀:靠近每个极点的空间比靠近赤道的结果密度大得多.原因很清楚:我将均匀分布的点从圆柱空间转换为球形.而且我扭曲了结果.同样的问题是如果我规范化立方体中随机生成的点.

我现在的想法是这样的:我想创建一个四面体,对其顶点进行标准化,将每个面(三角形)与中间的点分开,对其进行标准化并递归重复,直到我有足够的点.然后我稍微"扭曲"这些点.然后我再次将它们标准化.而已.

据我所知,这种方法本身并不是纯粹的数学蒙特卡罗方法,因为除了最后一步之外,我不会在任何步骤中使用随机分布.我不喜欢这种复杂性的解决方案.

任何人都可以建议更简单但仍然

  • 随机
  • 制服
  • 快速
  • 简单

谢谢!

编辑:
我需要一个快速的方法,而不仅仅是正确的方法.这就是我问蒙特卡罗的原因.提供的答案是正确的,但不是很快.四面体的方法很快,但不是很"随机"=>不正确.
我真的需要一些更合适的东西.

random 3d montecarlo

9
推荐指数
2
解决办法
8500
查看次数

如何以圆形形式均匀地传播点

我已经搜索了类似于这个问题的一些问题,但没有一个问题我遇到了同样的问题.我有一个单位的地图,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)

正如你在下一张图片中看到的那样,这个实际算法的结果是一个问题,因为它倾向于使点更密集于圆的中心并广泛分散在它的边缘.

在此输入图像描述

任何建议都将受到高度赞赏.

php math trigonometry

7
推荐指数
1
解决办法
637
查看次数

两个磁盘交叉区域的统一采样

给定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)

然而,这种方法相当昂贵,并且进一步无法保持均匀性.只是为了澄清我不想使用拒绝抽样.

random math geometry

7
推荐指数
1
解决办法
415
查看次数

在环(环)内生成均匀随机点

可能重复:
在环空中创建随机数

我想在一个内获得一个统一获得的随机点,即位于半径圆内R1但在半径圆外的区域R2,其中R1 > R2和两个圆都在同一点的中心.我想避免使用拒绝抽样.

如果可能的话,我希望解决方案与类似- 用于计算圆圈内的随机点 - 我发现它非常优雅和直观.也就是说,我也想避免使用平方根.

random math geometry probability

6
推荐指数
2
解决办法
5003
查看次数

如何在matlab中创建圆并在其中生成随机点

在此输入图像描述您好我想问一个问题如何在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)

random matlab geometry point

6
推荐指数
1
解决办法
5617
查看次数

如何在距离另一个地理点的距离d内创建随机地理点?

如何获得随机地理点[lat/long in decimal],放置在100米半径范围内的任何位置?圆的中心是另一个参考GeoPoint.有没有实现这个的函数/公式?

基本上我正在阅读我的Android设备的GPS输入,需要在设备周围生成随机的地理点[在我的设备中心的半径100米的圆圈].

请注意:数据库中没有预先存储的地理点.如上所述,我需要动态创建所有地理点.

gps geocoding geolocation convex-polygon

4
推荐指数
1
解决办法
4866
查看次数

如何在python或R中均匀地生成半圆内的一组随机点?

我正在尝试在半圆内均匀地生成一组点。

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个错误。

  1. 该情节有很多(-3,-3)点需要删除
  2. 它似乎效率低下。

下图所示的位置不一致,因为这些点比其他点更重心。

在此处输入图片说明

如下所示的另一个图可以看作是统一的。

在此处输入图片说明

任何解决错误的想法将不胜感激。

python numpy r

2
推荐指数
1
解决办法
341
查看次数