本文整理汇总了C++中Pair::get_lower_bound方法的典型用法代码示例。如果您正苦于以下问题:C++ Pair::get_lower_bound方法的具体用法?C++ Pair::get_lower_bound怎么用?C++ Pair::get_lower_bound使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pair
的用法示例。
在下文中一共展示了Pair::get_lower_bound方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: update_world
void Engine::update_world(double start_time, double delta_time)
{
frame_stop = start_time + delta_time;
double start = stopwatch();
bucVec keys;
bucVec new_keys;
bucVec obsolete_keys;
//Update the hashboxes for all dynamic objects
for(dyn_iterator dyn_it = wr->begin_dyn();dyn_it != wr->end_dyn(); ++dyn_it){
reaper::object::phys::ObjectAccessor &phys_acc = dyn_it->get_physics();
const double len = length(phys_acc.vel)*delta_time;
const double ext1 = phys_acc.radius + len +
phys_acc.max_acc * delta_time* delta_time / 2;
const double ext2 = ext1 - 2* len;
const Point &pos = dyn_it->get_pos();
Point pt1( pos + norm(phys_acc.vel)*ext1 );
Point pt2( pos - norm(phys_acc.vel)*ext2 );
const Point p1(min(pt1.x,pt2.x),min(pt1.y,pt2.y), min(pt1.z,pt2.z) );
const Point p2(max(pt1.x,pt2.x), max(pt1.y,pt2.y), max(pt1.z,pt2.z) );
the_grid.calc_key(p1,p2,keys);
bucVec& current_k = old_keys[dyn_it->get_id()];
for(int i = 0;i < keys.size(); ++i){
bucVec::const_iterator p =
find(current_k.begin(), current_k.end(), keys[i] );
if(p == current_k.end() )
new_keys.push_back(keys[i]);
}
for(int i = 0;i < current_k.size(); ++i){
bucVec::const_iterator p2 =
find(keys.begin(), keys.end(), current_k[i] );
if(p2 == keys.end() )
obsolete_keys.push_back(keys[i]);
}
for(int i = 0;i < new_keys.size();++i){
collision_table.insert(dyn_it->get_id(),new_keys[i]);
const set<int>& ids = collision_table.get_ids(new_keys[i]);
for(std::set<int>::const_iterator j = ids.begin();j != ids.end(); ++j){
int res = close_pairs.increase(dyn_it->get_id(),*j);
if(res == 1){
Pair* pr;
SillyPtr si = wr->lookup_si(*j);
StaticPtr st = wr->lookup_st(*j);
DynamicPtr dyn = wr->lookup_dyn(*j);
ShotPtr sh = wr->lookup_shot(*j);
if( si.valid() ){
pr = new SillyDynPair(si,*dyn_it);
}
else if( st.valid() )
pr = new StaticDynPair(st,*dyn_it);
else if( dyn.valid() )
pr = new DynDynPair(dyn,*dyn_it);
else if( sh.valid() )
pr = new ShotDynPair(sh,*dyn_it);
pr->calc_lower_bound();
prio_queue.insert(pr);
}
}
}
for(int i = 0;i < obsolete_keys.size();++i){
collision_table.remove(dyn_it->get_id(),obsolete_keys[i]);
const set<int> ids = collision_table.get_ids(new_keys[i]);
for(std::set<int>::const_iterator j = ids.begin();j != ids.end(); ++j){
close_pairs.decrease(dyn_it->get_id(),*j);
}
}
new_keys.clear();
obsolete_keys.clear();
}
double mid = stopwatch();
if(!prio_queue.empty()) {
while( !prio_queue.empty() && prio_queue.top()->get_lower_bound() < frame_stop ) {
//Now check if we want to simulate a collision between objects
//.........这里部分代码省略.........