【问题标题】:generation of 3D random points on the surface of a cube在立方体表面生成 3D 随机点
【发布时间】:2012-08-05 10:48:07
【问题描述】:

我正在尝试在处理过程中在立方体表面上随机均匀地生成点。我正在尝试制作动画,所以我需要点的 x、y 和 z 最终位置。

有什么建议吗?谢谢。

【问题讨论】:

  • 您想在立方体表面或立方体内随机生成点?
  • 你有在区间 [0,1) 上生成随机统一数的方法吗?
  • 对不起,我的意思是在立方体的表面上。 @HighPerformanceMark 我有 random(0,1) 方法,但我应该如何使用它?
  • 假设你的立方体是一个轴对齐的单位立方体,它应该很容易。对于每个点,其中一个轴应为 0 或 1。其余轴应位于 [0,1] 中。因此,首先选择一个随机轴,然后在该轴的 0 或 1 之间随机选择,最后为其余轴选择 [0,1] 之间的值。
  • 但是不知道这个方案是否满足你对地表点分布的要求。

标签: 3d geometry processing cube particles


【解决方案1】:

只需结合三个均匀随机分布。此方法假设您有一个单位立方体 [0..1]^3。如果不是这种情况,只需在生成点后缩放和偏移它们。

  1. 通过从 [0..6) 中获取整数来选择立方体的边
  2. 在该侧的平面中选择一个 x 坐标
  3. 在该侧的平面中选择一个 y 坐标

这是一些 C++ 类的伪代码:

vec3 result;
int s=randomSide(); // returns 0 to 5, uniformly distributed
int c=s%3; // get the axis perpendicular to the side you just picked

result[c]=s>2 ? 1.f : 0.f;
result[(c+1)%3]=random01();
result[(c+2)%3]=random01();

如果您有一个更通用的盒子而不是立方体,则必须根据盒子侧面的面积来偏向侧边拾取。

【讨论】:

  • 对不起我不习惯c++,按result[c]等等你的意思是vector.x vector.y vector.z?谢谢你的回答
  • 应该是访问第n个坐标,所以result[0]是x,result[1]是y,result[2]是z
  • 知道了。这段代码在处理过程中翻译起来很棘手,因为我必须使用 PVectors 并使用 vector.x 之类的位置访问它们
  • 只写一个小辅助函数,写入第 n 个坐标。这应该会更容易。
  • 我仍然缺少一张脸.. 尝试使用 random(0, 6) 但它不起作用:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多