Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅在二维阵列的边上选择点_C#_Arrays_Multidimensional Array_Xna - Fatal编程技术网

C# 如何仅在二维阵列的边上选择点

C# 如何仅在二维阵列的边上选择点,c#,arrays,multidimensional-array,xna,C#,Arrays,Multidimensional Array,Xna,所以我有一个float[,]heightmap,作为我的河流生成算法的一部分,我想选择两个点,只要它们是数组的一条边的一部分。这似乎是一项简单的任务,但我似乎无法想出一个不涉及太多if语句的解决方案。有没有办法从二维阵列的边缘进行选择?(即,x=0或x=max,或y=0或y=max)您可以创建一个包含所有边标记(如(0,10)的数组,然后将所有边标记放在一个数组中,现在您只需选择其中一个或多个即可。为了新颖起见,这里有一种方法不需要存储所有索引或任何if()区块: 你想要一个随机点吗?多少是太多

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

您可以创建一个包含所有边标记(如(0,10)的数组,然后将所有边标记放在一个数组中,现在您只需选择其中一个或多个即可。

为了新颖起见,这里有一种方法不需要存储所有索引或任何if()区块:


你想要一个随机点吗?多少是太多了?任何一个随机点只要在一条边上。编辑:如果相关的话,我将选择两个总分。你可以使用一个
开关
语句。总分是多少?你的意思是你只会选择两个点,而不是更多?有一件事与问题无关:如果你将随机范围扩展到数组长度的N倍,并使用模来获得范围内的一个点,那么你会在随机上归档更好的结果。我通常使用7作为多音标。
    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];
    }