相关疑难解决方法(0)

在球形体积内采样均匀分布的随机点

我希望能够生成一个随机均匀的粒子位置样本,该样本落在球形体积内.

下图(http://nojhan.free.fr/metah/提供)显示了我要找的内容.这是穿过球体的切片,显示了点的均匀分布:

均匀分布的圆圈

这就是我目前得到的:

均匀分布但是聚类点

由于球面和笛卡尔坐标之间的转换,您可以看到中心有一组点.

我使用的代码是:

def new_positions_spherical_coordinates(self):
   radius = numpy.random.uniform(0.0,1.0, (self.number_of_particles,1)) 
   theta = numpy.random.uniform(0.,1.,(self.number_of_particles,1))*pi
   phi = numpy.arccos(1-2*numpy.random.uniform(0.0,1.,(self.number_of_particles,1)))
   x = radius * numpy.sin( theta ) * numpy.cos( phi )
   y = radius * numpy.sin( theta ) * numpy.sin( phi )
   z = radius * numpy.cos( theta )
   return (x,y,z)
Run Code Online (Sandbox Code Playgroud)

下面是一些MATLAB代码,据说可以创建一个统一的球形样本,类似于http://nojhan.free.fr/metah给出的等式.我似乎无法破译它或理解他们做了什么.

function X = randsphere(m,n,r)

% This function returns an m by n array, X, in which 
% each of the m rows has the n Cartesian coordinates …
Run Code Online (Sandbox Code Playgroud)

python random matlab geometry uniform-distribution

36
推荐指数
3
解决办法
4万
查看次数

在球体上均匀分散n个点

我试图在球体上分散n个点,使得每个点在其周围具有"相同"区域.基本上,我试图通过评估n个点并假设每个区域元素是相同的(并且等于4pi r ^ 2/n)来在球体上集成函数.

我的问题与问题非常相关,但我似乎无法同意"接受"答案中提供的代码按预期工作(参见附图,通过选择R = 1000,nx = ny = 40生成).显然,我的观点更加集中在两极并且非常集中在赤道上.

有什么建议?

编辑:作为参考,我确实找到了一些生成网格的软件,使得每个点周围都有相等的"区域"(向下滚动以查看球体上的均匀区域分布),但是不是实现它们的代码,而是使用较少的 -耗时的方法:我简单地迭代方位角和极角([0,2pi]和[0,pi])并计算每个补片的''无穷小''区域(da = r ^ 2 sin theta dtheta dphi).这基本上是我在整个领域进行整合所需要的,我只是希望统一区域分布不会那么难实现.

algorithm math geometry integrate

18
推荐指数
2
解决办法
2万
查看次数

如何在更高维度的超球面上均匀分布点?

我对在尺寸为3或更高的球面上均匀分布N个点感兴趣。

更加具体:

  • 给定多个点N和多个维D(其中D> 1,N> 1)
  • 每个点到原点的距离必须为1
  • 两点之间的最小距离应尽可能大
  • 每个点到它最近的邻居的距离不必对于每个点都相同(实际上,除非点的数量形成柏拉图式实体的顶点,或者如果N <= D,则不可能相同。 )。

我对以下内容不感兴趣:

  • 在超球面上创建均匀的随机分布,因为我希望任意两点之间的最小距离尽可能大而不是随机分布。
  • 粒子排斥模拟类型的方法,因为它们难以实现并且需要花费很长的时间才能运行较大的N(理想情况下,该方法应该是确定性的,并且以O(n)为单位)。

满足这些条件的一种方法称为斐波那契晶格,但我只能在2d和3d中找到该方法的代码实现。

斐波纳契晶格(也称为斐波纳契螺旋)背后的方法是生成绕球体表面成螺旋形的一维线,以使该线所覆盖的表面积每转大致相同。然后,您可以丢掉均匀分布在螺旋上的N个点,它们将大致均匀地分布在球体的表面上。

此答案中,有一个针对3个维度的python实现,可生成以下内容:

在此处输入图片说明

我想知道斐波那契螺旋是否可以扩展到大于3的尺寸,并在数学堆栈交换中发布了一个问题。令我惊讶的是,我收到了两个令人惊讶的答案,据我所知(因为我不完全理解所显示的数学)表明确实有可能将该方法扩展到N维。

不幸的是,我对所显示的数学知识还不够了解,无法将任何一个答案都转换成(伪)代码。我是一位经验丰富的计算机程序员,但是我的数学背景仅此而已。

我将复制我认为是以下答案之一最重要的部分(不幸的是,SO不支持mathjax,因此我必须复制为图像)

在此处输入图片说明

我遇到的上述困难:

  • 如何解析用于?n的反函数?
  • 给出的示例是d = 3的。如何为任意d生成公式?

在座的任何人都可以理解所涉及的数学知识,从而能够朝着链接斐波那契晶格问题的任一答案的伪代码实现取得进展?我知道完整的实施可能很困难,因此我对部分实施感到满意,该实施可以使我足够自己完成其余的工作。

为简化起见,我已经编写了一个函数,该函数将N个维度的球面坐标转换为笛卡尔坐标,因此该实现可以输出任意一个,因为我可以轻松进行转换。

另外,我看到一个答案为每个附加维使用下一个质数。我可以轻松地编写一个输出每个连续素数的函数,因此可以假定已经实现了。

如果未能在N个维度上实现斐波那契晶格,我很乐意接受满足上述约束的另一种方法。

math geometry pseudocode

18
推荐指数
2
解决办法
464
查看次数

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

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

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

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

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

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

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

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

谢谢!

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

random 3d montecarlo

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

使用Fibonacci格子在球体上均匀排列点

我试图在单位球体的表面上或多或少均匀地排列点.

我被告知虽然这个问题很难解决,但Fibonacci Lattices提供了一个非常好的解决方案.

我已经尝试了几天来关注链接文档中提供的非常简单的方法,但我根本无法让它看起来正确.

我正在使用javascript,我有一个对象数组e,每个对象都公开一个latlon参数.这是我用来排列球体上的点的函数:(现在假设点的数量总是奇数)

function arrangeEntries(e)
{
    var p = e.length;
    var N = (p - 1) / 2;

    for (var i = -N; i <= N; i++)
    {
        e[i + N].lat = Math.asin((2 * i) / (2 * N + 1));
        e[i + N].lon = mod(i, 1.618034) * 3.883222;
    }
}
Run Code Online (Sandbox Code Playgroud)

function mod(a, b)
{
    return a - Math.floor(a / b) * b;
}
Run Code Online (Sandbox Code Playgroud)

不同于文档中,我latlon …

javascript algorithm fibonacci html5-canvas

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

R中圆上等距离的n个点的坐标?

我想得到R中圆上等距离的n个点的坐标。

数学上的解决方案是: exp((2*pi * i)*(k/n)) 其中 0 <= k < n

有很多 SOF 问题可以解决这个问题。所有解决方案都在非 R 环境中:

在球体上均匀分布n个点(提供java、python解决方案)

在圆上生成点(非 R 解决方案)

计算圆上8个等距点的像素坐标(python解决方案)

绘制均匀分布在圆上的点(非R解)

如何在R中绘制圆周围的点(没有等距)

圆圆周上每个点的坐标(非 R 解)

Pebble 中将圆分成 n 个相等的两半的点的坐标

如何高效地在屏幕上精确绘制N个点?(Python解决方案)

n 点在圆上的近似位置(非 R 解)

确定圆上的向量点

我为解决方案所做的:

# For 4 points, 0<=k<4    
exp((2*pi*sqrt(-1))*(0/4)); exp((2*pi*sqrt(-1))*(1/4)); exp((2*pi*sqrt(-1))*(2/4)); exp((2*pi*sqrt(-1))*(3/4)) 
Run Code Online (Sandbox Code Playgroud)

R 中没有定义复数 i。不存在与 pi (3.14) 相反的常数。模拟 i 的 sqrt(-1) 技巧不起作用;错误:

[1] NaN 
Warning message: In sqrt(-1) : NaNs produced
Run Code Online (Sandbox Code Playgroud)

geometry r coordinates evenly

5
推荐指数
2
解决办法
3829
查看次数

如何在 p5.js 中为球体(冠状病毒)周围的圆柱体制作嵌套 for 循环?

我很新,正在学习 p5.js,我正在尝试在 p5.js 中用一个球体和一堆圆柱体制作一个 3D 冠状病毒。

你可以在这里看到我的草图:https : //editor.p5js.org/zzzzzij/sketches/frE9-37R

    var sketch = function (p) {
      with(p) {

        let angle = 0;

        p.setup = function() {
          createCanvas(400, 400, WEBGL);
        };
    
        p.draw = function() {
          ambientLight(255);
          background(175);
          noStroke();
          rotateY(angle);
          rotateZ(angle*0.8);
          normalMaterial();

          push();
          rotateY(PI);
          sphere(100);
          pop();

          push();
          for (i = 0; i < 24; i ++) {
            rotateZ(PI/6);
            push();
            translate (0, -21*5, 0*5);
            rotateY(PI/18);
            rotateX(0);
            cylinder (6, 20);
            pop();
          } 

          for (i = 0; i < 24; i ++) {
            rotateZ(PI/5);
            push(); …
Run Code Online (Sandbox Code Playgroud)

javascript for-loop nested-loops p5.js

5
推荐指数
1
解决办法
154
查看次数

带有覆盖世界的六边形网格坐标的表格

在 PostGIS 中寻找一个实现来生成覆盖整个地球的六边形网格,以便聚合每个六边形上的数据。

任何指向正确方向的指针都会有很大帮助!

最终产品: - 一张表格,其中包含覆盖整个世界的六边形网格中每个六边形的中心点。- 六边形有固定面积

postgresql geometry postgis geolocation

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

我想在vtk(python)中制作均匀分布的球体

正如你在标题中看到的,我想在vtk(python)中制作均匀分布的球体

首先,我看到这个链接“均匀分布球体上的n个点”,这是一种创建均匀分布球体的方法。通过该链接,我获得了均匀分布球体的 x、y、z 坐标。

其次,这实际上并不是我必须解决的问题。问题是即使我有均匀分布球体的 x,y,z 坐标,我也无法在 vtk(python) 上制作多数据。

import numpy as np
import mpl_toolkits.mplot3d
import matplotlib.pyplot as plt
import vtk
from scipy.spatial import Delaunay

num_pts = 1000
indices = np.arange(0, num_pts, dtype=float) + 0.5

phi = np.arccos(1 - 2*indices/num_pts)
theta = np.pi * (1 + 5**0.5) * indices

x, y, z = np.cos(theta) * np.sin(phi), np.sin(theta) * np.sin(phi), np.cos(phi);

# x,y,z is coordination of evenly distributed shpere
# I will try to make poly data use this …
Run Code Online (Sandbox Code Playgroud)

python vtk evenly

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

计算球体周围的点

如何计算球体周围的点?我的粒子爆炸需要这个.我不希望粒子的点是随机的.我需要它们呈球形.对于2d圈爆炸,我使用了这个:

float n=many;
float rad = 1;
for (int i = 0; i < n; i++)
{
        float fi = 2*PI*i/n;
        float x1 = rad*sin(fi + PI)+x ;
        float y1 = rad*cos(fi + PI)+y ;
        addparticlesmart(x,y,(x1-x),(y1-y), 0.01f),r,g,b,a,0.02f);
}
Run Code Online (Sandbox Code Playgroud)

c++ math geometry particle-system

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