如何从另一个点知道相邻点

时间:2011-12-02 10:12:45

标签: c# graphics

我是图形新手。我有一个小组,我用它来绘制一些点。现在我将点击面板中的任意位置,我需要找到最接近Clicked点的点。哪个是找到它的最佳方法。有人可以帮助我。

@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 个答案:

答案 0 :(得分:3)

这样做的数学方法是计算距离。

它仍然比使用圆圈的蛮力方法更快

你可以使用向量(存在于3.5中的.net中)与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 :(得分:1)

在面板的点击事件中,选择已完成点击的点。开始创建从1开始增加半径的圆(不要绘制它,只需创建后面的对象n代码),并尝试找出每个定义的点首先与圆相交。

答案 2 :(得分:1)

您可以计算点击点与其他点之间的距离,然后找出最短距离。如何计算距离? - 使用毕达哥拉斯定理。 Here是如何计算2点之间的距离