66 lines
1.8 KiB
C++
66 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "LineSegment.h"
|
|
#include "Shape.h"
|
|
#include <J3ML/LinearAlgebra/Vector3.h>
|
|
#include <J3ML/Geometry/Common.h>
|
|
|
|
namespace J3ML::Geometry
|
|
{
|
|
// TODO: Move to separate math lib, find duplicates!
|
|
template <typename T>
|
|
void Swap(T &a, T &b)
|
|
{
|
|
T temp = std::move(a);
|
|
a = std::move(b);
|
|
b = std::move(temp);
|
|
}
|
|
|
|
using namespace LinearAlgebra;
|
|
class Capsule : public Shape
|
|
{
|
|
public:
|
|
// Specifies the two inner points of this capsule
|
|
LineSegment l;
|
|
// Specifies the radius of this capsule
|
|
float r;
|
|
|
|
Capsule();
|
|
Capsule(const LineSegment& endPoints, float radius);
|
|
Capsule(const Vector3& bottomPt, const Vector3& topPt, float radius);
|
|
bool IsDegenerate() const;
|
|
float Height() const;
|
|
float Diameter() const;
|
|
Vector3 Bottom() const;
|
|
Vector3 Center() const;
|
|
Vector3 Centroid() const;
|
|
Vector3 ExtremePoint(const Vector3& direction);
|
|
AABB MinimalEnclosingAABB() const;
|
|
|
|
void ProjectToAxis(const Vector3 &direction, float &outMin, float &outMax) const;
|
|
|
|
bool Intersects(const Plane &plane) const;
|
|
|
|
bool Intersects(const Ray &ray) const;
|
|
|
|
bool Intersects(const Line &line) const;
|
|
|
|
bool Intersects(const LineSegment &lineSegment) const;
|
|
|
|
bool Intersects(const AABB &aabb) const;
|
|
|
|
bool Intersects(const OBB &obb) const;
|
|
|
|
bool Intersects(const Sphere &sphere) const;
|
|
|
|
bool Intersects(const Capsule &capsule) const;
|
|
|
|
bool Intersects(const Triangle &triangle) const;
|
|
|
|
bool Intersects(const Polygon &polygon) const;
|
|
|
|
bool Intersects(const Frustum &frustum) const;
|
|
|
|
bool Intersects(const Polyhedron &polyhedron) const;
|
|
};
|
|
} |