You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

84 lines
2.0 KiB

// David Eberly, Geometric Tools, Redmond WA 98052
// Copyright (c) 1998-2021
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
// https://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
// Version: 4.0.2019.08.13
#pragma once
#include <Mathematics/Vector.h>
// The triangle is represented as an array of three vertices. The dimension
// N must be 2 or larger.
namespace gte
{
template <int N, typename Real>
class Triangle
{
public:
// Construction and destruction. The default constructor sets
// the/ vertices to (0,..,0), (1,0,...,0) and (0,1,0,...,0).
Triangle()
:
v{ Vector<N, Real>::Zero(), Vector<N, Real>::Unit(0), Vector<N, Real>::Unit(1) }
{
}
Triangle(Vector<N, Real> const& v0, Vector<N, Real> const& v1, Vector<N, Real> const& v2)
:
v{ v0, v1, v2 }
{
}
Triangle(std::array<Vector<N, Real>, 3> const& inV)
:
v(inV)
{
}
// Public member access.
std::array<Vector<N, Real>, 3> v;
public:
// Comparisons to support sorted containers.
bool operator==(Triangle const& triangle) const
{
return v == triangle.v;
}
bool operator!=(Triangle const& triangle) const
{
return v != triangle.v;
}
bool operator< (Triangle const& triangle) const
{
return v < triangle.v;
}
bool operator<=(Triangle const& triangle) const
{
return v <= triangle.v;
}
bool operator> (Triangle const& triangle) const
{
return v > triangle.v;
}
bool operator>=(Triangle const& triangle) const
{
return v >= triangle.v;
}
};
// Template aliases for convenience.
template <typename Real>
using Triangle2 = Triangle<2, Real>;
template <typename Real>
using Triangle3 = Triangle<3, Real>;
}