Как узнать соседние точки из других точек - PullRequest
1 голос
/ 02 декабря 2011

Я новичок в графике.У меня есть панель, которую я использовал для построения некоторых точек.Теперь я щелкну в любом месте на панели, и мне нужно найти точку, ближайшую к нажатой точке.Какой самый лучший способ найти это.Может ли кто-нибудь мне помочь.

@ Yahia На самом деле я создал несколько точек, которые будут выглядеть как

. . . .                                                               
. . . .                                                               
. . . .

И теперь я буду нажимать между этими точками, и мне нужно найти ближайшую точкуот того, где я щелкнул и покрасил это другое.

Код, который я использовал, является

PlotterMap = new Bitmap(this.pnlPlotterMap.Width, this.pnlPlotterMap.Height,     
System.Drawing.Imaging.PixelFormat.Format24bppRgb);                                                  
BufferGraphics = Graphics.FromImage(PlotterMap);     
BufferGraphics.FillEllipse(brush, plcolplot.XPixel1, plcolplot.YPixel1,2,2);   

Ответы [ 3 ]

3 голосов
/ 02 декабря 2011

математический способ сделать это - вычислить расстояния.

это все равно будет намного быстрее, чем при использовании метода грубой силы кругов

Вы можете сделать это с векторами (которые существуют в .net с 3.5 и выше) в сочетании с LINQ:

Point mousePos = new Point();
List<Point> points = new List<Point>();

var closest = (from Point p in points 
              select new { 
                Vector = (mousePos - p), 
                Point = p }
              ).OrderBy(a => a.Vector.Length).FirstOrDefault();

if (closest != null)
{
    double distance = closest.Vector.Length;
    Point closesPoint = closest.Point;
}
1 голос
/ 02 декабря 2011

Вы можете рассчитать расстояния между выбранной точкой и другими точками, а затем найти кратчайшее расстояние. Как рассчитать расстояние? - использовать теорему Пифагора. Здесь - как рассчитать расстояние между 2 точками

1 голос
/ 02 декабря 2011

В событии клика на вашей панели выберите точку, где был сделан клик. Начните создавать круги с увеличивающимся радиусом, начиная с 1 (не рисуйте это, просто создайте код объекта n позади) и попытайтесь выяснить, какая из определенных точек сначала пересекается с вашим кругом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...