Oli*_*bes 14
您需要的是适合于在平面中组织点的数据结构.KD-Tree经常用于这种情况.请参阅维基百科上的kd树.
在这里,我找到了几何算法的一般描述
我将KD树的Java实现移植到C#.请在RoboWiki上查看用户:Ojd/KD-Tree.您可以在那里下载代码,也可以直接从我的主页下载CySoft.Collections.zip(只下载,没有文档).
vc *_* 74 10
对于给定点(并非所有点)并且由于点数不是极端,您可以计算每个点的距离:
var points = new List<Point>();
Point source = ...
....
var closestPoints = points.Where(point => point != source).
OrderBy(point => NotReallyDistanceButShouldDo(source, point)).
Take(20);
private double NotReallyDistanceButShouldDo(Point source, Point target)
{
return Math.Pow(target.X - source.X, 2) + Math.Pow(target.Y - source.Y, 2);
}
Run Code Online (Sandbox Code Playgroud)
(我用x = 20)
计算基于双打,所以fpu应该能够在这里做一个体面的工作.请注意,如果Point是类而不是结构,则可能会获得更好的性能.
| 归档时间: |
|
| 查看次数: |
18600 次 |
| 最近记录: |