Fixed several recursive header issues, refactored Math lib, began implementing core mathematical functions as wrappers around stdmath, will implement SSE and lookup tables later.
This commit is contained in:
@@ -1,15 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#include <format>
|
||||
#include <optional>
|
||||
|
||||
#include <J3ML/LinearAlgebra.h>
|
||||
#include <J3ML/LinearAlgebra/Common.h>
|
||||
#include <J3ML/Geometry/Common.h>
|
||||
#include <J3ML/Geometry/Shape.h>
|
||||
#include "J3ML/Algorithm/RNG.h"
|
||||
|
||||
#include "Polygon.h"
|
||||
#include "Sphere.h"
|
||||
#include <J3ML/Algorithm/RNG.h>
|
||||
|
||||
|
||||
namespace J3ML::Geometry
|
||||
{
|
||||
|
||||
|
||||
// TODO: Move this somewhere else to do goofy experiments!
|
||||
template <typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>, T>>
|
||||
float fdiv(T a, T b) {
|
||||
return (float)a/(b);
|
||||
}
|
||||
|
||||
using namespace J3ML::LinearAlgebra;
|
||||
using J3ML::Algorithm::RNG;
|
||||
|
||||
@@ -47,12 +59,25 @@ namespace J3ML::Geometry
|
||||
@note Since an AABB cannot generally represent an OBB, this conversion is not exact, but the returned AABB
|
||||
specifies a larger volume.
|
||||
@see class OBB. */
|
||||
explicit AABB(const OBB &obb);
|
||||
explicit AABB(const OBB &obb) {
|
||||
SetFrom(obb);
|
||||
}
|
||||
|
||||
/// Constructs this AABB to enclose the given Sphere.
|
||||
/** @see class Sphere. */
|
||||
explicit AABB(const Sphere &s);
|
||||
explicit AABB(const Sphere &s) {
|
||||
SetFrom(s);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Returns the diameter vector of this AABB.
|
||||
/** @note For AABB, Diagonal() and Size() are the same concept. These functions are provided for symmetry with the OBB class.
|
||||
@see Size(), HalfDiagonal() */
|
||||
Vector3 Diagonal() const { return Size(); }
|
||||
|
||||
/// Returns Diagonal()/2.
|
||||
/// @see Diagonal(), HalfSize()
|
||||
Vector3 HalfDiagonal() const { return HalfSize(); }
|
||||
|
||||
static AABB FromCenterAndSize(const Vector3 ¢er, const Vector3 &size);
|
||||
@@ -184,6 +209,7 @@ namespace J3ML::Geometry
|
||||
float SurfaceArea() const;
|
||||
Vector3 GetClosestPoint(const Vector3& point) const;
|
||||
|
||||
|
||||
void Translate(const Vector3& offset);
|
||||
AABB Translated(const Vector3& offset) const;
|
||||
void Scale(const Vector3& scale);
|
||||
@@ -329,12 +355,27 @@ namespace J3ML::Geometry
|
||||
void Enclose(const LineSegment &lineSegment);
|
||||
void Enclose(const OBB &obb);
|
||||
void Enclose(const Sphere &sphere);
|
||||
|
||||
void Enclose(const Triangle &triangle);
|
||||
|
||||
void Enclose(const Capsule &capsule);
|
||||
void Enclose(const Frustum &frustum);
|
||||
void Enclose(const Polygon &polygon);
|
||||
void Enclose(const Polyhedron &polyhedron);
|
||||
void Enclose(const Vector3 *pointArray, int numPoints);
|
||||
|
||||
void Enclose(const Frustum &frustum) {
|
||||
//Enclose(frustum.MinimalEnclosingAABB());
|
||||
}
|
||||
void Enclose(const Polygon &polygon) {
|
||||
//Enclose(polygon.MinimalEnclosingAABB());
|
||||
}
|
||||
void Enclose(const Polyhedron &polyhedron) {
|
||||
//Enclose(polyhedron.MinimalEnclosingAABB());
|
||||
}
|
||||
void Enclose(const Vector3 *pointArray, int numPoints) {
|
||||
assert(pointArray || numPoints == 0);
|
||||
if (!pointArray)
|
||||
return;
|
||||
for (int i = 0; i < numPoints; ++i)
|
||||
Enclose(pointArray[i]);
|
||||
}
|
||||
|
||||
|
||||
bool TestAxis(const Vector3& axis, const Vector3& v0, const Vector3& v1, const Vector3& v2) const;
|
||||
|
Reference in New Issue
Block a user