2016-03-04 54 views
-3

我想把圓圈的數目分成3個部分,並從每個部分檢查它是否有點。這裏的代碼,但我不怎麼檢查?從圓圈的各個部分檢查

int[] x = new int[3]; 
int[] y = new int[3]; 

for (int p = 0; p < Points.Count; p++) 
{ 
    Point po =(Point)points[p]; 

    for (int i = 1; i <= 3;i++) 
    { 
     double angle = i * (360/3); 
     x[i] = (int)(po.x + iTransmissionRadius * Math.Cos(convertToRadians(angle))); 
     y[i] = (int)(po.y + iTransmissionRadius * Math.Sin(convertToRadians(angle))); 
    } 
} 
+0

的可能的複製[有效地找了一圈行業內分](http://stackoverflow.com/questions/13652518/efficiently-find-points-inside-a-circle-sector) –

+0

我建議你保持'float'座標而不是轉換爲'int'。 – ja72

+0

我不明白你在檢查什麼。 「並從每個部分檢查是否有分數」。每個部分由點'x'和'y'定義。 – ja72

回答

0

這是你要求的嗎?

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(); 
     }); 
    } 

}