2010-11-22 76 views
1

如果我有一个画布上的两个System.Drawing.Rectangle对象和Point,什么是计算其Rectangle最好的办法(任何Rectangle的一部分,而不仅仅是其LocationPoint)最接近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

用一张纸和一支铅笔对此进行分类。数量有限的情况。否则它是一个模棱两可的问题,你需要指定当一个点在一个或多个矩形内时会发生什么。 – 2010-11-22 22:20:32

+0

一些答案也可以在这里找到: http://stackoverflow.com/questions/5254838/calculating-distance-between-a-point-and-a-rectangular-box-nearest-point/ – Mo0gles 2014-04-22 13:21:26

回答

4

距离为矩形=分钟(距离 到每个4线段即 是矩形的边缘)

对于距离到线段,参见this question

0

这是衡量2点之间的距离,所以从你的矩形坐标点(这是由你来决定是因为我不知道最近有什么对你而言):

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; 
    } 
+0

真正的问题是“哪些点我必须选择”,而不是“如何计算距离” – 2010-11-22 22:23:45

+0

我想那么问题就变成了如何找到矩形中的哪个点最接近给定的点。然后,如你所说,这只是找到单个点和距所有矩形最近的点之间最近距离的问题。 – 2010-11-22 22:24:23

0

嗯。我正在考虑循环矩形数组并将每个X和Y索引存储在列表中。然后你可以遍历列表并做一些abs(min(i.getX() - point))。如果它们相等,则检查min(y)。

+0

不需要计算“点对点”距离“线对点”就足够了 – 2010-11-22 22:24:58