【问题标题】:How to Select Points only at edges of a 2d array如何仅在二维数组的边缘选择点
【发布时间】:2012-12-30 19:35:29
【问题描述】:

所以我有一个float[,] 高度图,作为我的河流生成算法的一部分,我想选择两个点,只要它们是数组边缘之一的一部分。这似乎是一项简单的任务,但我似乎想不出一个不涉及太多 if 语句的解决方案。有没有办法从二维数组的边缘进行选择? (即x = 0x = maxy = 0y = max

【问题讨论】:

  • 你想要一个随机点吗?
  • 多少算太多?
  • 任何随机点,只要它在其中一条边上。编辑:如果相关,我将选择两个总分。
  • 您可以使用单个 switch 语句。
  • 总分是多少?你的意思是你只会选择两个点而不是更多?

标签: c# arrays multidimensional-array xna


【解决方案1】:

您可以创建一个包含所有边缘索引(如 (0,10))的数组,并将它们全部放在一个数组中,现在您可以简单地选择其中的一个或多个。

【讨论】:

  • 与问题无关的一件事:如果您将随机范围拉伸到数组长度的 N 倍并使用模数来获得范围内的一个点,您可以随机存档更好的结果。我通常使用 7 作为乘法器。
【解决方案2】:

为了新颖,这里有一种方法,它不涉及存储所有索引或任何 if() 块:

    static void randPoint(int width, int height, out int x, out int y, Random r)
    {
        int[] dim = {width,height};
        int[] res = new int[2];

        res[0] = r.Next(0, 2) * (width - 1);
        res[1] = r.Next(0, 2) * (height - 1);
        int hv = r.Next(0, 2);
        res[hv] = r.Next(0,dim[hv]);

        x = res[0];
        y = res[1];
    }

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 2015-12-14
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多