Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c++;,如何任意创建点位置?_C++_Arrays_Simulation_Point_Cartesian - Fatal编程技术网

C++ 在c++;,如何任意创建点位置?

C++ 在c++;,如何任意创建点位置?,c++,arrays,simulation,point,cartesian,C++,Arrays,Simulation,Point,Cartesian,我正试图编写一个模拟程序。最初我会像这样随机创建点 for (int c = 0; c < number; c++){ for(int d = 0; d < 3; d++){ coordinate[c][d] = randomrange(low, high); } } for(int c=0;c

我正试图编写一个模拟程序。最初我会像这样随机创建点

for (int c = 0; c < number; c++){  
    for(int d = 0; d < 3; d++){  
        coordinate[c][d] = randomrange(low, high);
    }
}   
for(int c=0;c
其中,randomrange()是任意范围随机化器,number是创建的点的数量,d表示x、y、z坐标。这是可行的,但我想把事情做得更进一步。我如何定义一个已知的形状?假设一个圆的圆周上有80个点,或者一个立方体的边缘有500个点。我可以在纸上很好地解释,但在将过程描述为编码时有一个问题。这与问题无关,但我最终将点转换为txt文件,然后使用matlab、scatter3绘制点。创建“形状”点是我的问题。

简单变体:
首先考虑最小/最大x/y值(单独;为了减少以下步骤的错误值),生成一些与此范围匹配的坐标,然后检查它是否满足,例如
a^2+b^2=r^2
(圆圈)
如果没有,请再试一次

更好,但仅适用于某些形状:
生成介于(0-max)和角度(0-360)之间的半径
(如果它应该在圆边界上,则只需一个角度)
并使用一些数学(sin/cos…)将其转换为x和y。

圆和立方体边集都是一维集,因此可以将它们表示为实间隔。对于圆,它很简单:使用一个区间(0,2pi)并将区间中的随机值phi转换为一个点:

xcentre+R cos(φ),ycentre+R sin(φ)


对于立方体,您有12段,因此使用区间(0,12)并将区间中的随机数拆分为整数部分和小数部分。然后使用整数作为边数,分数作为边内的位置。

我相信我已经尝试了你的建议。我尝试了一个pi旋转的螺旋线作为样本。将x创建为一个均匀位移的值范围,使y=square(rad^2-x^2),然后将z向上移动一定量。对于(int c=0;c <代码>。我认为你不熟悉,因为你的
randomrange
看起来像
std::uniform\u real\u distribution
那里的函数只是一个虚构的例子。我使用的是带有随机函数的C头。是r1273之类的。我不一定需要它们。事实上,我更喜欢统一分配分数。从那里,如果我需要一些随机性的形状,我将只添加一个较小的随机值到每个x,y,z分量。或者不用麻烦分裂,使用两个分布:一个
std::uniform_int_分布
来选择边,一个
std::uniform_real_分布沿着边。是的,这比我写的更简单。但是,伪随机生成器可能会显示连续结果之间的一些相关性,在这种情况下,最好使用单个结果进行定位(除非必须使用多个结果,例如在多维空间中定位时,如圆形或立方体的内部)。使用
,包含的RNG足够坚固。我也不会担心单个结果中位之间的相关性,这是使用单个结果的问题。不,对于多维空间,你不一定需要多个结果。如果您的RNG生成64位结果,并且每个维度具有32位分辨率,那么一个结果就足够了。OTOH,如果每个维度使用64位双精度,而您的RNG只生成32位,那么每个维度将需要2个结果。您无法关联所需的维度和结果。