// double sided wall?! double CollisionDetection ( // returns crossFraction... ParticleSystem p, const Vec &state_old, // state (t) const Vec &state_new, // state (t+dt) int &wall, int &par // the (first) colliding particle and corresponding wall ) { Vec3 pos, oldpos; double crossFraction, t; // fraction: [0,1] // find the first collision (if any) crossFraction = 1.0; // any constant > 1.0 wall = par = -1; for (int i = 0; i < p->planes.size(); i++) { for (int j = 0; j < p->particles.size(); j++) { pos = Vec3 (state_new[6*j+0], state_new[6*j+1], state_new[6*j+2]); if (OutOfBound (pos, p->planes[i])) { oldpos = Vec3 (state_old[6*j+0], state_old[6*j+1], state_old[6*j+2]); t = GetCrossFraction (p->planes[i], oldpos, pos); if (t > 0 && t < crossFraction) { crossFraction = t; // record: i, j wall = i, par = j; } } } } // if all in bound, return 1.0 (acknowledge the newpos) // and *wall is -1 return crossFraction; }
void list<T>::pop_back(){ if(size_ <= 0) throw OutOfBound(); Node *tmp = tail_->prev_; tmp->prev_->next_ = tmp->next_; tmp->next_->prev_ = tmp->prev_; delete tmp; size_--; }
void list<T>::pop_front(){ if(size_ <= 0) throw OutOfBound(); Node *tmp = head_->next_; tmp->prev_->next_ = tmp->next_; tmp->next_->prev_ = tmp->prev_; delete tmp; size_--; }
Droga* Kontener::RetDroga(unsigned int id) { if(id>=itsDrogi.size()) throw OutOfBound("Kontener::RetDroga: id="+id); return &itsDrogi[id]; };
typename list<T>::iterator& list<T>::iterator::operator--(){ pointer_ = pointer_->prev_; if (pointer_->prev_ == NULL) throw OutOfBound(); return *this; }