160 #ifndef ZENI_COLLISION_H
161 #define ZENI_COLLISION_H
170 namespace Collision {
172 class ZENI_DLL Sphere;
173 class ZENI_DLL Plane;
176 class ZENI_DLL Line_Segment;
177 class ZENI_DLL Infinite_Cylinder;
178 class ZENI_DLL Capsule;
179 class ZENI_DLL Parallelepiped;
186 float shortest_distance(
const Sphere &rhs)
const;
187 float shortest_distance(
const Point3f &rhs)
const;
188 inline float shortest_distance(
const Plane &rhs)
const;
189 inline float shortest_distance(
const Line &rhs)
const;
190 inline float shortest_distance(
const Ray &rhs)
const;
191 inline float shortest_distance(
const Line_Segment &rhs)
const;
193 inline float shortest_distance(
const Capsule &rhs)
const;
196 template <
typename TYPE>
197 bool intersects(
const TYPE &rhs)
const;
212 float shortest_distance(
const Plane &rhs)
const;
213 float shortest_distance(
const Point3f &rhs)
const;
214 float shortest_distance(
const Sphere &rhs)
const;
215 inline float shortest_distance(
const Line &rhs)
const;
216 inline float shortest_distance(
const Ray &rhs)
const;
217 inline float shortest_distance(
const Line_Segment &rhs)
const;
219 inline float shortest_distance(
const Capsule &rhs)
const;
222 template <
typename TYPE>
223 bool intersects(
const TYPE &rhs)
const;
247 inline float shortest_distance(
const Sphere &rhs)
const;
248 inline float shortest_distance(
const Point3f &rhs)
const;
249 inline float shortest_distance(
const Plane &rhs)
const;
250 inline float shortest_distance(
const Line &rhs)
const;
251 inline float shortest_distance(
const Ray &rhs)
const;
252 inline float shortest_distance(
const Line_Segment &rhs)
const;
254 inline float shortest_distance(
const Capsule &rhs)
const;
257 template <
typename TYPE>
258 bool intersects(
const TYPE &rhs)
const;
277 Ray() : end_point_a(0.0
f, 0.0
f, 0.0
f), end_point_b(0.0
f, 0.0
f, 0.0
f) {}
290 inline float shortest_distance(
const Sphere &rhs)
const;
291 inline float shortest_distance(
const Point3f &rhs)
const;
292 inline float shortest_distance(
const Plane &rhs)
const;
293 inline float shortest_distance(
const Line &rhs)
const;
294 inline float shortest_distance(
const Ray &rhs)
const;
295 inline float shortest_distance(
const Line_Segment &rhs)
const;
297 inline float shortest_distance(
const Capsule &rhs)
const;
300 template <
typename TYPE>
301 bool intersects(
const TYPE &rhs)
const;
320 Line() : end_point_a(0.0
f, 0.0
f, 0.0
f), end_point_b(0.0
f, 0.0
f, 0.0
f) {}
324 float shortest_distance(
const Line &rhs)
const;
325 float shortest_distance(
const Point3f &rhs)
const;
326 float shortest_distance(
const Sphere &rhs)
const;
328 float shortest_distance(
const Plane &rhs)
const;
330 inline float shortest_distance(
const Ray &rhs)
const;
332 inline float shortest_distance(
const Capsule &rhs)
const;
334 template <
typename TYPE>
335 bool intersects(
const TYPE &rhs)
const;
356 const float &radius_);
358 const float &radius_);
361 float shortest_distance(
const Point3f &rhs)
const;
362 float shortest_distance(
const Sphere &rhs)
const;
363 float shortest_distance(
const Plane &rhs)
const;
364 float shortest_distance(
const Line &rhs)
const;
365 float shortest_distance(
const Ray &rhs)
const;
367 inline float shortest_distance(
const Capsule &rhs)
const;
370 template <
typename TYPE>
371 bool intersects(
const TYPE &rhs)
const;
386 const float &radius_);
399 inline float shortest_distance(
const Capsule &rhs)
const;
400 inline float shortest_distance(
const Point3f &rhs)
const;
401 inline float shortest_distance(
const Sphere &rhs)
const;
402 inline float shortest_distance(
const Plane &rhs)
const;
403 inline float shortest_distance(
const Line &rhs)
const;
404 inline float shortest_distance(
const Ray &rhs)
const;
405 inline float shortest_distance(
const Line_Segment &rhs)
const;
409 template <
typename TYPE>
410 bool intersects(
const TYPE &rhs)
const;
423 Parallelepiped() : point(0.0
f, 0.0
f, 0.0
f), edge_a(1.0
f, 0.0
f, 0.0
f), edge_b(0.0
f, 1.0
f, 0.0
f), edge_c(0.0
f, 0.0
f, 1.0
f) {}
428 float shortest_distance(
const Point3f &rhs)
const;
429 float shortest_distance(
const Sphere &rhs)
const;
430 float shortest_distance(
const Plane &rhs)
const;
432 inline float shortest_distance(
const Line &rhs)
const;
433 inline float shortest_distance(
const Ray &rhs)
const;
434 inline float shortest_distance(
const Line_Segment &rhs)
const;
435 inline float shortest_distance(
const Capsule &rhs)
const;
437 template <
typename TYPE>
438 bool intersects(
const TYPE &rhs)
const;
const Point3f & get_end_point_a() const
const Vector3f & get_direction() const
std::pair< float, float > nearest_point(const LINE_TYPE &lhs, const Point3f &rhs)
const Vector3f & get_normal_b() const
const Vector3f & get_normal_c() const
const Point3f & get_end_point_a() const
const Vector3f & get_direction() const
const Point3f & get_end_point_a() const
const Vector3f & get_normal_a() const
const float & get_radius() const
const float & get_direction2() const
const float & get_direction2() const
const Point3f & get_end_point_b() const
const Vector3f & get_normal() const
const Point3f & get_end_point_a() const
const float & get_radius() const
Collision Infinite Cylinder.
const Point3f & get_center() const
A 3D Point represented with floats.
const Point3f & get_center() const
static bool has_lower_bound()
static bool has_lower_bound()
const Vector3f & get_edge_c() const
A Featureful 3-Space Vector Class.
const Vector3f & get_direction() const
const Matrix4f & get_convert_from() const
const Vector3f & get_edge_a() const
const Vector3f & get_edge_b() const
const Point3f & get_end_point_b() const
Collision Parallelepiped.
const Point3f & get_end_point_b() const
const Point3f & get_point() const
const Matrix4f & get_convert_to() const
static bool has_upper_bound()
const Point3f & get_end_point_b() const
static bool has_upper_bound()
const Point3f & get_point() const
A Featureful 4-Space Matrix Class.
const Point3f & get_end_point_a() const
const float & get_direction2() const
const Point3f & get_end_point_b() const
static bool has_upper_bound()
const float & get_radius() const
static bool has_lower_bound()
const Vector3f & get_extents() const