2017-02-18 6 views
-1

У меня есть один сценарий, как кластер для ближайшего CGPoint в UIView. Так я множество CGPoint NSArray, я пытаюсь получить ближайшее значение и не группироваться, но я не мог получить логику: // мой кодКак найти ближайший CGPoint и создать кластер из NSArray?

for (CGPoint firstObjOfCGPoint in cgPointGroupArray) {    

    for (CGPoint nextPoint in cgPointGroupArray) { 

    if (30>[self distanceBetween: firstObjOfCGPoint and:nextPoint]){     
       [shortestClusterArr addObject:nextPoint]; 
      } 
      else{ 
       [longestClusterArr addObject:nextPoint]; 
      } 
     } 
      if(shortestClusterArr.count>2){ 
      //clustered marker 
       [self addClusterMarker:shortestClusterArr]; 
      } 
      else{ 
       //dont cluster marker 
      } 
    } 
} 


    //find distance 

    - (float)distanceBetween:(CGPoint)p1 and:(CGPoint)p2 
    { 
     return hypotf((p1.x-p2.x), (p1.y-p2.y)); 

    } 

Над кодом, время получить дубликаты точек, а также переопределить на зацикливание тот же объект, поэтому, если кто-то знает логический комментарий здесь, ...

ответ

0

Вам нужно проверить, существует ли объект, который уже существует, перед добавлением. Что-то вроде этого:

for (CGPoint nextPoint in cgPointGroupArray) { 
      if (30>[self distanceBetween:point and: nextPoint]) { 
       if (![shortestClusterArr containsObject:nextPoint]) 
        [shortestClusterArr addObject:nextPoint]; 
      } 
      else{ 
       if (![longestClusterArr containsObject:nextPoint]) 
        [longestClusterArr addObject:nextPoint]; 
      } 
     } 
Смежные вопросы