如何找到离点最近的矩形

3

如果我在画布上有两个System.Drawing.Rectangle对象和一个Point,那么计算哪个Rectangle(不仅仅是其Location Point)最接近该Point最佳方法是什么?

以下是一个单元测试示例:

Rectangle one = new Rectangle (0, 0, 10, 10);

Rectangle two = new Rectangle (20, 20, 10, 10);

Point point = new Point(14, 14);

Rectangle actual = ClosestToPoint(point, one, two);

// should be closer to one since one's bottom right is at (10, 10)
Assert.That(actual, Is.SameAs(one));

// method to write
public Rectangle ClosestToPoint(Point p, params Rectangle[] rectangles) { } 

1
使用一张纸和一支铅笔来解决这个问题。场景数量有限。否则,这是一个模糊的问题,您需要指定当一个点在一个或多个矩形内部时会发生什么。 - Hans Passant
一些答案也可以在这里找到: https://dev59.com/NG435IYBdhLWcg3wuign - Mo0gles
3个回答

4

矩形到距离 = 最小值 (到矩形的四条边界线段的每一个距离)

有关线段到距离,请参见此问题


除非我漏看了什么,否则如果点在矩形内部,这将得出错误的答案。 - CAFxX
@CAFxX - 取决于你如何定义“到矩形的距离”。如果你将矩形看作实体,则当点在矩形内部时,你可能希望将距离定义为0。然而,我相信有些情况下,无论点是否在矩形内部,你都希望将距离定义为到最近边缘的距离。 - mbeckish

0
嗯,我想循环遍历您的矩形数组并将每个X和Y索引存储在列表中。然后您可以循环遍历该列表并执行abs(min(i.getX() - point))的某些操作。如果它们相等,则检查min(y)。

不需要计算“点到点”的距离,只需计算“线到点”的距离即可。 - Ahmet Kakıcı

0

这是用于测量两点之间距离的,因此请从您的矩形中获取坐标点(由于我不知道对您来说最接近的意思是什么,所以由您决定):

   public int Distance2D(int x1, int y1, int x2, int y2)
   {

    int result = 0;
    double part1 = Math.Pow((x2 - x1), 2);

    double part2 = Math.Pow((y2 - y1), 2);
    double underRadical = part1 + part2;
    result = (int)Math.Sqrt(underRadical);

     return result;
   }

真正的问题是“我必须选择哪些点”,而不是“如何计算距离”。 - Ahmet Kakıcı
那么问题就变成了如何找到矩形中离给定点最近的点。然后,就像你所说的那样,只需要找到单个点和所有矩形最近点之间的最短距离即可。 - Michael Hedgpeth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接