2011-12-02 40 views
1

我是圖形界的新手。我有一個我曾經用來繪製點的小組。現在我將點擊面板中的任何地方,我需要找到離點擊點最近的點。這是找到這個最好的方法。有人能幫助我嗎?如何從另一個點知道相鄰點

@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

請顯示一些代碼...你有什麼試過?在這種情況下,「最接近」的定義究竟是什麼? – Yahia

+0

@Yahia其實我已經創建了一些積分,這將是這樣 – Sunil

+1

找近鄰法 – Reniuz

回答

1

在您面板的單擊事件,停下的地方點擊已經做了點。從1開始創建增加半徑的圓(不要畫這個,只是在後面創建對象n代碼),並嘗試找出哪個每個定義的點先與圓相交。

+0

這似乎是一個緩慢的方法,通過點lookping以及使用Pyhagorean定理distince做得更快,我認爲。儘管如此,你的方法將工作 – Thomas

+0

@maheep我現在如果我試圖that..hope是works..shall我只是用我的預定點匹配點,或有任何方程that..thanks的幫助.. – Sunil

+0

很少scared..but真的很想這麼做(它真的很慢,根本不算數學),你必須確保你使用實心圓而不是畫圓(或者如果你的增量太大,你可以跳過點)。但坦率地說:DONT DO THAT – fixagon

1

可以計算點擊點和其他點之間的距離,然後找到最短距離。如何計算距離? - 使用畢達哥拉斯定理。 Here是如何得2分

+0

@renius感謝您的幫助 – Sunil

3

數學的方式來做到這將是計算之間的距離計算距離。

它仍然會比做圓的窮舉法的方式更快

你可以用向量(在.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; 
} 
+0

這絕對不是我所用圓圈建議更好 – Maheep

+0

我還沒有嘗試之前LINQ,但也許是。第一次嘗試。感謝您的幫助 – Sunil

相關問題