【问题标题】:How to generate random points(x,y,z) given a set of points如何在给定一组点的情况下生成随机点(x,y,z)
【发布时间】:2017-03-22 04:51:57
【问题描述】:

如何在java中生成随机点(x,y,z),给定一组点说

float[] array{ 0.5f,0.0f,0.0f,-0.5f,0.0f,0.0f....};

其中数组的格式为{x1,y1,z1,x2,y2,z2...},指定数组的点形成边界,以便我可以使用这些点在openglEs2.0中生成网格

【问题讨论】:

  • 只需将数学按比例缩小 3。
  • 我想我会先从整个数组中提取点,然后从其中随机选择一个。如果您不想这样做,请使用 Random 对象,调用它的 nextInt(array.length / 3) 并将结果乘以 3 以获得点坐标的起始索引。
  • 当你说数组形成一个边界时,你的意思是你想要一个边界内的随机点,而不是数组中的一个点?
  • 是的,我想要边界内的随机点@OleV.V.

标签: java math opengl-es


【解决方案1】:

当我们不知道边界的形状时,这可能看起来很复杂。我最好的建议是对分数进行加权平均。我希望这在所有情况下都能为您带来满意的结果。

产生加权平均值的一种方法:生成与点数一样多的随机双精度数或浮点数(浮点数组长度的三分之一)。 Math.random() 可以做到这一点。例如,如果有四个点,您可能会得到[ 0.54, 0.74, 0.12, 0.6 ](这些数字会有更多的小数,但为了一个简单的例子)。添加数字(在示例中这将产生 2.0)。将每个数字除以总和得到[ 0.27, 0.37, 0.06, 0.3 ]。现在数字的总和是 1.0,这就是我们需要的:现在这些数字是加权平均的权重。通过相应的权重缩放每个点并添加缩放点。现在你的随机点在边界内。

我仍然认为我会按照我在评论中所说的那样做:首先从浮点数组生成点。我会发现使用点对象更自然,而且我认为更容易找到任何错误,而且我不太可能制造任何错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多