Как найти какой прямоугольник ближе всего к точке - PullRequest
2 голосов
/ 23 ноября 2010

Если у меня есть два System.Drawing.Rectangle объекта на холсте и Point, каков лучший способ вычислить, какую Rectangle (любую часть 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) { } 

Ответы [ 4 ]

4 голосов
/ 23 ноября 2010

расстояние до прямоугольника = мин (расстояние к каждому из 4 отрезков, которые являются краями прямоугольника)

Относительно расстояния до отрезка линии см. этот вопрос

0 голосов
/ 23 ноября 2010

Я думаю, вы хотите найти ближайший отрезок со всех сторон прямоугольника. Эта ссылка может помочь Наименьшее расстояние между точкой и отрезком

0 голосов
/ 23 ноября 2010

Хм.Я думаю о циклическом просмотре массива прямоугольников и сохранении каждого индекса X и Y в списке.Затем вы можете перебрать список и сделать что-нибудь abs (min (i.getX () - point)).Если они равны, проверьте min (y).

0 голосов
/ 23 ноября 2010

Это для измерения расстояния между двумя точками, поэтому возьмите координатную точку с вашего прямоугольника (который решать вам, потому что я не знаю, что для вас ближе всего):

   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;
   }
...