2010-11-22 42 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