這是你要求的嗎?
class Program
{
static Random rnd=new Random();
static void Main(string[] args)
{
var points=new List<Point>();
for(int i=0; i<100; i++)
{
points.Add(new Point(rnd.Next(100), rnd.Next(100)));
}
int iTransmissionRadius=6;
var neighbors=FindClosestPoints(points).ToArray();
// count = 100
var has_neighbors_within_radius=neighbors.Zip(points, (A, B) => AreWithinRadius(A,B,iTransmissionRadius)).ToArray();
// true or false if there is neighbor closer than radius
}
static double DistanceBetweenPoints(Point A, Point B)
{
return Math.Sqrt((A.X-B.X)*(A.X-B.X)+(A.Y-B.Y)*(A.Y-B.Y));
}
static bool AreWithinRadius(Point A, Point B, int radius)
{
return DistanceBetweenPoints(A,B)<=radius;
}
static IEnumerable<Point> FindClosestPoints(IEnumerable<Point> points)
{
return points.Select((A) =>
{
var list=points.ToArray();
Array.Sort(list, (B,C)=> DistanceBetweenPoints(A,B).CompareTo(DistanceBetweenPoints(A,C)));
return list.Skip(1).FirstOrDefault();
});
}
}
的可能的複製[有效地找了一圈行業內分](http://stackoverflow.com/questions/13652518/efficiently-find-points-inside-a-circle-sector) –
我建議你保持'float'座標而不是轉換爲'int'。 – ja72
我不明白你在檢查什麼。 「並從每個部分檢查是否有分數」。每個部分由點'x'和'y'定義。 – ja72