Exemplo n.º 1
0
bool CFlock::RayTest( Vec3 &raySrc,Vec3 &rayTrg,SFlockHit &hit )
{
//	Vec3 v;
	Vec3 p1,p2;
	// Check all boids.
	for (unsigned int i = 0; i < m_boids.size(); i++)
	{
		CBoidObject *boid = m_boids[i];

		Lineseg lseg(raySrc,rayTrg);
		Sphere sphere(boid->m_pos,boid->m_scale);
		if ( Intersect::Lineseg_Sphere( lseg,sphere,  p1,p2 ) > 0)
		{
			hit.object = boid;
			hit.dist = (raySrc - p1).GetLength();
			return true;
		}
	}
	return false;
}
Exemplo n.º 2
0
CNode * lseg_insert_back(CNode * hd, CNode * tl)
	_(requires hd != NULL && tl != NULL)
	_(requires lseg(hd, tl))
	_(requires !\oset_in(tl, lseg_reach(hd, tl)))

	_(ensures \result != tl)
	_(ensures lseg(\result, tl))
	_(ensures !\oset_in(tl, lseg_reach(\result, tl)))
;

_(dryad)
CNode * circular_list_insert_back(CNode * x)
	_(requires x != NULL)
	_(requires x->next != NULL)
	_(requires lseg(x->next, x))
	_(requires !\oset_in(x, lseg_reach(x->next, x)))

	_(ensures \result != x)
	_(ensures \result == x->next)
	_(ensures lseg(\result, x))
	_(ensures !\oset_in(x, lseg_reach(\result, x)))
{
	_(assume mutable_list(x))
	CNode * next = x->next;

	if (next == x) {
		CNode * tl = (CNode *) malloc(sizeof(CNode));
		_(assume tl != NULL)

		tl->next = x;