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];
}