我正在尝试对模拟进行编程。最初我会随机创建这样的点…
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绘制这些点。创建"形状"点是我的问题。
圆和立方体边集都是一维集,因此可以将它们表示为实区间。对于圆,这很简单:使用区间(0,2pi)并将区间中的随机值phi转换为点:
xcentre+R cos(phi)
对于一个立方体,你有12个分段,所以使用区间(0,12),并将区间中的随机数拆分为整数部分和分数。然后使用整数作为边数,使用分数作为边内的位置。
简单变体:
首先考虑最小/最大x/y值(单独考虑;为了减少下面步骤的错误值),生成一些与该范围匹配的坐标,然后检查它是否满足例如a^2+b^2=r^2
(圆)
如果没有,请重试。
更好,但仅适用于某些形状:
生成介于(0-max)和角度(0-360)之间的半径
(如果应该在圆边界上,则仅为一个角度)
并使用一些数学(sin/cos…)将其转换为x和y。
http://en.wikipedia.org/wiki/Polar_coordinate_system