我是图形新手。我有一个小组,我用它来绘制一些点。现在我将点击面板中的任意位置,我需要找到最接近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);
答案 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点之间的距离