Exemple #1
0
void KdTree::searchInternal(KdNode* node,List<VecItem*>& items){
	if( node ){
		searchInternal(node->left,items);
		items.append( node->item );
		searchInternal(node->right,items);
	}
}
Exemple #2
0
void KdTree::searchInternal(KdNode* node,const BBox& bb,int d,List<VecItem*>& items){
	if( node ){
		Vec pn = node->item->getPosition();
		if( (d==0 && bb.getMinX()<pn.getX()) || bb.getMinY()<pn.getY() ){
			searchInternal(node->left,bb,(d+1)%m_k,items);
		}
		if( bb.contains(pn) ){
			items.append( node->item );
		}
		if( (d==0 && pn.getX()<=bb.getMaxX()) || pn.getY()<=bb.getMaxY() ){
			searchInternal(node->right,bb,(d+1)%m_k,items);
		}
	}
}
Exemple #3
0
void KdTree::searchInternal(KdNode* node,const Vec& p,double range,int d,List<VecItem*>& items){
	if( node ){
		Vec pn = node->item->getPosition();

		if( (d==0 && (p.getX()-range)<pn.getX()) || (p.getY()-range)<pn.getY() ){
			searchInternal(node->left,p,range,(d+1)%m_k,items);
		}
		if( p.distanceToLessThan(pn,range) ){
			items.append( node->item );
		}
		if( (d==0 && pn.getX()<=(p.getX()+range)) || pn.getY()<=(p.getY()+range) ){
			searchInternal(node->right,p,range,(d+1)%m_k,items);
		}
	}
}
int BinarySearch::search(const std::vector<int>& datas,
                         const int dest)
{
    LOG(INFO) << "Enter: " << __func__;
    int ret = -1;
    ret = searchInternal(datas, 0, datas.size() - 1, dest);
    LOG(INFO) << "Leave: " << __func__;
    return ret;
}
Exemple #5
0
bool RenderingRuleSearchRequest::search(int state, bool loadOutput) {
	searchResult = false;
	int tagKey = values[PROPS->R_TAG->id];
	int valueKey = values[PROPS->R_VALUE->id];
	bool result = searchInternal(state, tagKey, valueKey, loadOutput);
	if (result) {
		searchResult = true;
		return true;
	}
	result = searchInternal(state, tagKey, 0, loadOutput);
	if (result) {
		searchResult = true;
		return true;
	}
	result = searchInternal(state, 0, 0, loadOutput);
	if (result) {
		searchResult = true;
		return true;
	}
	return false;
}
Exemple #6
0
List<VecItem*> KdTree::getItems(const BBox& bb){
	List<VecItem*> items;
	searchInternal(m_root,bb,0,items);
	return items;
}
Exemple #7
0
List<VecItem*> KdTree::getItems(const Vec& p, double range){
	List<VecItem*> items;
	searchInternal(m_root,p,range,0,items);
	return items;
}
Exemple #8
0
List<VecItem*> KdTree::getItems(){
	List<VecItem*> items;
	searchInternal(m_root,items);
	return items;
}