Exemple #1
0
// 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;
}
Exemple #2
0
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_--;
}
Exemple #3
0
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_--;
}
Exemple #4
0
Droga* Kontener::RetDroga(unsigned int id)
{
	if(id>=itsDrogi.size())
		throw OutOfBound("Kontener::RetDroga: id="+id);
	return &itsDrogi[id];
};
Exemple #5
0
typename list<T>::iterator& list<T>::iterator::operator--(){
	pointer_ = pointer_->prev_;
	if (pointer_->prev_ == NULL)
		throw OutOfBound();
	return *this;
}