瀏覽代碼

math: rename Box2D to "box2" and add an integer version, "ibox2".

legacy
Sam Hocevar sam 12 年之前
父節點
當前提交
96e26a2bd5
共有 4 個檔案被更改,包括 63 行新增32 行删除
  1. +49
    -25
      src/lol/math/geometry.h
  2. +7
    -7
      test/unit/box.cpp
  3. +6
    -0
      tools/vimlol/vimlol.vim
  4. +1
    -0
      tools/vslol/CppKeywordClassifier.cs

+ 49
- 25
src/lol/math/geometry.h 查看文件

@@ -28,77 +28,101 @@
namespace lol namespace lol
{ {


struct Box2D
#define LOL_BOX_TYPEDEFS(tname, suffix) \
template <typename T> struct tname; \
typedef tname<float> suffix; \
typedef tname<double> d##suffix; \
typedef tname<int32_t> i##suffix; \
typedef tname<uint32_t> u##suffix;

LOL_BOX_TYPEDEFS(Box2, box2)
LOL_BOX_TYPEDEFS(Box3, box3)

#undef LOL_BOX_TYPEDEFS

/*
* 2D boxes
*/

template <typename T> struct Box2
{ {
inline Box2D()
: A(0.f, 0.f),
B(0.f, 0.f)
inline Box2()
: A(T(0)),
B(T(0))
{} {}


inline Box2D(vec2 a, vec2 b)
inline Box2(Vec2<T> a, Vec2<T> b)
: A(a), : A(a),
B(b) B(b)
{} {}


Box2D operator +(vec2 v)
Box2<T> operator +(Vec2<T> v)
{ {
return Box2D(A + v, B + v);
return Box2<T>(A + v, B + v);
} }


Box2D &operator +=(vec2 v)
Box2<T> &operator +=(Vec2<T> v)
{ {
return *this = *this + v; return *this = *this + v;
} }


Box2D operator -(vec2 v)
Box2<T> operator -(Vec2<T> v)
{ {
return Box2D(A - v, B - v);
return Box2<T>(A - v, B - v);
} }


Box2D &operator -=(vec2 v)
Box2<T> &operator -=(Vec2<T> v)
{ {
return *this = *this - v; return *this = *this - v;
} }


vec2 A, B;
Vec2<T> A, B;
}; };


struct Box3D
/*
* 3D boxes
*/

template <typename T> struct Box3
{ {
inline Box3D()
: A(0.f, 0.f, 0.f),
B(0.f, 0.f, 0.f)
inline Box3()
: A(T(0)),
B(T(0))
{} {}


inline Box3D(vec3 a, vec3 b)
inline Box3(Vec3<T> a, Vec3<T> b)
: A(a), : A(a),
B(b) B(b)
{} {}


Box3D operator +(vec3 v)
Box3<T> operator +(Vec3<T> v)
{ {
return Box3D(A + v, B + v);
return Box3<T>(A + v, B + v);
} }


Box3D &operator +=(vec3 v)
Box3<T> &operator +=(Vec3<T> v)
{ {
return *this = *this + v; return *this = *this + v;
} }


Box3D operator -(vec3 v)
Box3<T> operator -(Vec3<T> v)
{ {
return Box3D(A - v, B - v);
return Box3<T>(A - v, B - v);
} }


Box3D &operator -=(vec3 v)
Box3<T> &operator -=(Vec3<T> v)
{ {
return *this = *this - v; return *this = *this - v;
} }


vec3 A, B;
Vec3<T> A, B;
}; };


static inline bool BoxIsectBox(Box2D const &b1, Box2D const &b2)
/*
* Helper geometry functions
*/

static inline bool BoxIsectBox(box2 const &b1, box2 const &b2)
{ {
vec2 dist = 0.5f * (b1.A - b2.A + b1.B - b2.B); vec2 dist = 0.5f * (b1.A - b2.A + b1.B - b2.B);
vec2 e1 = 0.5f * (b1.B - b1.A); vec2 e1 = 0.5f * (b1.B - b1.A);


+ 7
- 7
test/unit/box.cpp 查看文件

@@ -26,23 +26,23 @@ LOLUNIT_FIXTURE(BoxTest)


LOLUNIT_TEST(Box2DIsect) LOLUNIT_TEST(Box2DIsect)
{ {
Box2D b1(vec2(0.f, 0.f), vec2(10.f, 10.f));
Box2D b2(vec2(5.f, 8.f), vec2(8.f, 12.f));
Box2D b3(vec2(5.f, 11.f), vec2(8.f, 13.f));
box2 b1(vec2(0.f, 0.f), vec2(10.f, 10.f));
box2 b2(vec2(5.f, 8.f), vec2(8.f, 12.f));
box2 b3(vec2(5.f, 11.f), vec2(8.f, 13.f));


LOLUNIT_ASSERT_EQUAL(true, BoxIsectBox(b1, b2)); LOLUNIT_ASSERT_EQUAL(true, BoxIsectBox(b1, b2));
LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b1, b3)); LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b1, b3));


Box2D b4(vec2(96.f, 33.f), vec2(144.f, 129.f));
Box2D b5(vec2(264.f, 91.f), vec2(244.f, 71.f));
box2 b4(vec2(96.f, 33.f), vec2(144.f, 129.f));
box2 b5(vec2(264.f, 91.f), vec2(244.f, 71.f));


LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b4, b5)); LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b4, b5));
} }


LOLUNIT_TEST(Box2DMove) LOLUNIT_TEST(Box2DMove)
{ {
Box2D b1(vec2(0.f, 0.f), vec2(1.f, 1.f));
Box2D b2(vec2(2.f, 2.f), vec2(3.f, 3.f));
box2 b1(vec2(0.f, 0.f), vec2(1.f, 1.f));
box2 b2(vec2(2.f, 2.f), vec2(3.f, 3.f));


b1 += vec2(0.6f, 0.6f); b1 += vec2(0.6f, 0.6f);
LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b1, b2)); LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b1, b2));


+ 6
- 0
tools/vimlol/vimlol.vim 查看文件

@@ -39,6 +39,12 @@ au Syntax cpp
\ int2 int3 int4 int2x2 int3x3 int4x4 \ int2 int3 int4 int2x2 int3x3 int4x4
\ float2 float3 float4 float2x2 float3x3 float4x4 \ float2 float3 float4 float2x2 float3x3 float4x4


" More GLSL-like types from the Lol Engine
au Syntax cpp
\ syn keyword cType
\ box2 dbox2 ivec2 uvec2
\ box3 dbox3 ivec3 uvec3

" Ensure we know about nullptr " Ensure we know about nullptr
au Syntax cpp au Syntax cpp
\ syn keyword cConstant \ syn keyword cConstant


+ 1
- 0
tools/vslol/CppKeywordClassifier.cs 查看文件

@@ -110,6 +110,7 @@ class CppKeywordClassifier : IClassifier
"ldouble|real|half", "ldouble|real|half",
"(float|int)([234]|2x2|3x3|4x4)", "(float|int)([234]|2x2|3x3|4x4)",
"(f(16|128)||d|[ui](8|16||64)|r)(vec[234]|mat[234]|quat|cmplx)", "(f(16|128)||d|[ui](8|16||64)|r)(vec[234]|mat[234]|quat|cmplx)",
"(|[dui])box[23]",
}; };


private static string[] m_csharp_types = private static string[] m_csharp_types =


Loading…
取消
儲存