【问题标题】:What is the name of this geometrical function?这个几何函数的名称是什么?
【发布时间】:2010-03-25 16:18:17
【问题描述】:

在二维整数空间中,有两个点 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 或类似的实现。

但大多数时候我只是想知道它是什么。它快把我逼疯了。 感觉有点像卷积,但我上学的时间太长了,我无法确定。

【问题讨论】:

  • 从技术上讲,这是一个丢番图问题。然而,由于这个特定问题的非常受限(即,值总是

标签: algorithm math geometry


【解决方案1】:

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

【讨论】:

  • 但它具体不是{1,1},{2,3}的笛卡尔积,或者是?
  • 好吧,我想严格来说它是 {VectorX->X ... VectorY->X} * {VectorX->Y ... VectorY->Y} 的笛卡尔积,但这可能不是你要找的
  • 好吧,我知道它至少有一部分有名字。我不擅长名字。
  • 如果您说的是在具有整数格顶点的多边形中枚举整数格点,请查看“en.wikipedia.org/wiki/Pick's_theorem”(您必须复制并粘贴 URL进入您的浏览器,因为它没有在此评论字段中得到正确处理)。尽管 Pick 定理是众所周知的,但我认为实际上并没有一个术语来表示所讨论的点集。
【解决方案2】:

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

给定 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

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

使用笛卡尔积解决它变得更加棘手。当您的点非常靠近时,使用笛卡尔积很简单,但是当您有 {1,1} 和 {8,8} 时呢?那么问题就涉及到更多了。你拿两套:

{ a: min(x_1,y_1)

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

【讨论】:

  • 我认为是问题的笛卡尔积部分让我想到“我正在做的这件事有一个名字”。可能不是整个过程。谢谢。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    笛卡尔积

    中使用列表推导

    Python

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

    和 Haskell

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

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 2012-06-15
      • 2019-10-10
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2011-06-03
      相关资源
      最近更新 更多