Ignore:
Timestamp:
07/18/05 21:22:46 (19 years ago)
Author:
bittner
Message:

bug with find neighbors fixed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibilityPreprocessor/src/KdTree.cpp

    r177 r181  
    674674  return NULL; 
    675675} 
     676 
     677int 
     678KdTree::FindNeighbors(KdNode *n, 
     679                      vector<KdNode *> &neighbors, 
     680                      bool onlyUnmailed 
     681                      ) 
     682{ 
     683  stack<KdNode *> nodeStack; 
     684   
     685  nodeStack.push(mRoot); 
     686 
     687  AxisAlignedBox3 box = GetBox(n); 
     688 
     689  while (!nodeStack.empty()) { 
     690    KdNode *node = nodeStack.top(); 
     691    nodeStack.pop(); 
     692    if (node->IsLeaf()) { 
     693      if ( node != n && (!onlyUnmailed || !node->Mailed()) )  
     694        neighbors.push_back(node); 
     695    } else { 
     696      KdInterior *interior = (KdInterior *)node; 
     697      if (interior->mPosition > box.Max(interior->mAxis)) 
     698        nodeStack.push(interior->mBack); 
     699      else 
     700        if (interior->mPosition < box.Min(interior->mAxis)) 
     701          nodeStack.push(interior->mFront); 
     702        else { 
     703          // random decision 
     704            nodeStack.push(interior->mBack); 
     705            nodeStack.push(interior->mFront); 
     706        } 
     707    } 
     708  } 
     709   
     710  return neighbors.size(); 
     711} 
Note: See TracChangeset for help on using the changeset viewer.