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

时间:2015-03-31 07:42:15

标签: 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);
    }
}   

其中randomrange()是任意范围随机化器,number是创建点的数量,d代表x,y,z坐标。它有效,但我想进一步。我如何定义已知的形状?假设我想要一个圆周上的80个点,或500个形成立方体边缘的点。我可以在纸上解释清楚,但是有一个问题将过程描述为编码。这与问题无关,但我最终将分数转换为txt文件,然后使用matlab,scatter3来绘制点。创建“形状”点是我的问题。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

更好,但只适用于某些形状:
生成(0-max)和角度(0-360)之间的半径
(或者如果它应该在圆形边界上,只是一个角度)
并使用一些数学(sin / cos ...)将其转换为x和y http://en.wikipedia.org/wiki/Polar_coordinate_system