virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const = 0;
virtual bool contains(const Vec3 &pt) const = 0;
- virtual float distance(const Vec3 &v) const = 0;
- virtual float signed_distance(const Vec3 &v) const = 0;
+ virtual float distance(const Vec3 &v) const;
+ virtual float signed_distance(const Vec3 &v) const;
+
+ virtual float distance_sq(const Vec3 &v) const = 0;
+ virtual float signed_distance_sq(const Vec3 &v) const = 0;
};
class Sphere : public GeomObject {
virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
virtual bool contains(const Vec3 &pt) const;
- virtual float distance(const Vec3 &v) const;
- virtual float signed_distance(const Vec3 &v) const;
+ virtual float distance_sq(const Vec3 &v) const;
+ virtual float signed_distance_sq(const Vec3 &v) const;
};
class AABox : public GeomObject {
virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
virtual bool contains(const Vec3 &pt) const;
- virtual float distance(const Vec3 &v) const;
- virtual float signed_distance(const Vec3 &v) const;
+ virtual float distance_sq(const Vec3 &v) const;
+ virtual float signed_distance_sq(const Vec3 &v) const;
};
class Box : public AABox {
virtual bool intersect(const Ray &ray, HitPoint *hit = 0) const;
virtual bool contains(const Vec3 &pt) const;
- virtual float distance(const Vec3 &v) const;
- virtual float signed_distance(const Vec3 &v) const;
+ virtual float distance_sq(const Vec3 &v) const;
+ virtual float signed_distance_sq(const Vec3 &v) const;
};
virtual float distance(const Vec3 &v) const;
virtual float signed_distance(const Vec3 &v) const;
+
+ virtual float distance_sq(const Vec3 &v) const;
+ virtual float signed_distance_sq(const Vec3 &v) const;
};
class Disc : public Plane {
//! true if the projection of pt to the plane is contained within the disc radius
virtual bool contains(const Vec3 &pt) const;
- virtual float distance(const Vec3 &v) const;
- virtual float signed_distance(const Vec3 &v) const;
+ virtual float distance_sq(const Vec3 &v) const;
+ virtual float signed_distance_sq(const Vec3 &v) const;
};
//! project point to plane
//! calculate the intersection of two axis-aligned bounding boxes
bool intersect_aabox_aabox(AABox *res, const AABox &a, const AABox &b);
+//! determine if a sphere and an axis-aligned box collide
+bool collision_sphere_aabox(const Sphere &s, const AABox &b);
+
#endif // GEOMOBJ_H_