这个几何函数的名称是什么?

时间:2010-03-25 01:28:58

标签: algorithm math geometry

在二维整数空间中,有两个点,A和B.此函数返回由A和B限定的四边形子集中的点的枚举。

A = {1,1} B = {2,3}

Fn(A,B)= {{1,1},{1,2},{1,3},{2,1},{2,2},{2,3}}

我可以在几行LINQ中实现它。

private void UnknownFunction(Point to, Point from, List<Point> list)
{
    var vectorX = Enumerable.Range(Math.Min(to.X, from.X), Math.Abs(to.X - from.Y) + 1);
    var vectorY = Enumerable.Range(Math.Min(to.Y, from.Y), Math.Abs(to.Y - from.Y) + 1);
    foreach (var x in vectorX)
        foreach (var y in vectorY)
            list.Add(new Point(x, y));
}

我很确定这是一个标准的数学运算,但我想不出它是什么。 请随意告诉我,这是您选择的语言中的一行代码。或者用lambdas或其他一些方法给我一个狡猾的实现。

但大多数情况下我只是想知道它的叫什么。这让我疯了。 感觉有点像卷积,但是自从我上学以来,我已经太久了。

4 个答案:

答案 0 :(得分:5)

这是您的具体示例中{1,2}{1,2,3}集的Cartesian product,或者通常是代码中vectorXvectorY的笛卡尔积示例

答案 1 :(得分:1)

我不知道这是一个标准的数学运算,如果你想用数学方法描述它,它就会被描述为。

在N ^ 2中给出两个点,(x_1,x_2)和(y_1,y_2)。然后将min_1设为min(x_1,y_1),将max_1设为max(x_1,y_1),并将min_2和max_2设为对称运算。然后该集定义为:

Enum = {(a,b):a,b in N ^ 2 and min_1&lt; = a&lt; = max_1 and min_2&lt; = b&lt; = max_2}

这对我来说似乎很随意,我会说这对我来说似乎不是一个相当标准的数学运算。

使用笛卡尔积解决它变得更加棘手。当你的点数非常接近时,使用笛卡尔积很简单,但是当你得到{1,1}和{8,8}时呢。然后问题就更多了。你拿两套:

{a:min(x_1,y_1)&lt; = a&lt; = max(x_1,y_1)}和{b:min(x_2,y_2)&lt; = b&lt; = max(x_2,y_2)}

在这两种情况下,您只需获取范围内的所有值并在整个空间中进行枚举。再一次,感觉就像一个任意的操作,也许我错了,但我不认为这有一个众所周知的名字。除了枚举矩形中的点之外。

答案 2 :(得分:1)

边界/矩形中的整数/格点。

(类似于http://en.wikipedia.org/wiki/Integer_points_in_convex_polyhedra的名称)

答案 3 :(得分:1)

笛卡儿积,使用

中的列表推导

的Python

[(x,y) for x in [1,2] for y in [1,2,3] ]

和Haskell

[(x,y) | x <- [1,2] , y <- [1,2,3] ]