Пример #1
0
int query(int p,int l,int r,int ql,int qr){
 if(ql <= l && r <= qr)
  return seg[p];
 int mid = (r+l)/2;
 bool nul = 1;
 int res = 0,tmp = 0;
 if(ql <= mid)
  res = query(2*p,l,mid,ql,qr),nul = 0;
 if(mid < qr){
  tmp = query(2*p+1,mid+1,r,ql,qr);
  if(!nul)
   res = a_max(res,tmp);
  else
   res = tmp;
 }
 return res;
}
Пример #2
0
void BoundCreation::MergeAABBs(const AABB * aabb_a, const AABB * aabb_b, AABB * rtn_aabb)
{
	Eigen::Vector3f a_min(aabb_a->GetCenter() - aabb_a->GetExtents());
	Eigen::Vector3f a_max(aabb_a->GetCenter() + aabb_a->GetExtents());
	Eigen::Vector3f b_min(aabb_b->GetCenter() - aabb_b->GetExtents());
	Eigen::Vector3f b_max(aabb_b->GetCenter() + aabb_b->GetExtents());
	Eigen::Vector3f rtn_min;
	Eigen::Vector3f rtn_max;

	rtn_min[0] = std::min(a_min[0], b_min[0]);
	rtn_min[1] = std::min(a_min[1], b_min[1]);
	rtn_min[2] = std::min(a_min[2], b_min[2]);

	rtn_max[0] = std::max(a_max[0], b_max[0]);
	rtn_max[1] = std::max(a_max[1], b_max[1]);
	rtn_max[2] = std::max(a_max[2], b_max[2]);

	rtn_aabb->SetExtents((rtn_max - rtn_min) * 0.5f);
	rtn_aabb->SetCenter((rtn_max + rtn_min) * 0.5f);
}
Пример #3
0
void upd(int p)
{
 seg[p] = a_max(seg[p<<1],seg[(p<<1)+1]);
}