minor changes to floorplan
fixed some compile issues worked on nav-meshes added some tests
This commit is contained in:
101
tests/navMesh/TestNavMeshBenchmark.cpp
Normal file
101
tests/navMesh/TestNavMeshBenchmark.cpp
Normal file
@@ -0,0 +1,101 @@
|
||||
#ifdef WITH_TESTS
|
||||
|
||||
#include "../Tests.h"
|
||||
|
||||
#include "../../navMesh/NavMeshFactory.h"
|
||||
#include "../../navMesh/walk/NavMeshSub.h"
|
||||
using namespace NM;
|
||||
|
||||
TEST(NavMeshBenchmark, benchDraw) {
|
||||
|
||||
Floorplan::IndoorMap map;
|
||||
Floorplan::Floor floor; map.floors.push_back(&floor); floor.atHeight = 0; floor.height = 3;
|
||||
Floorplan::FloorOutlinePolygon outline; floor.outline.push_back(&outline);
|
||||
|
||||
// circle (many triangles)
|
||||
int i = 0;
|
||||
for (float f = 0; f < M_PI*2; f += 0.1) {
|
||||
const float x = std::cos(f) * 10;
|
||||
const float y = std::sin(f) * 10;
|
||||
outline.poly.points.push_back(Point2(x,y));
|
||||
++i;
|
||||
}
|
||||
|
||||
outline.outdoor = false;
|
||||
outline.method = Floorplan::OutlineMethod::ADD;
|
||||
|
||||
NavMeshSettings set;
|
||||
NavMesh<NM::NavMeshTriangle> nm;
|
||||
NavMeshFactory<NM::NavMeshTriangle> fac(&nm, set);
|
||||
fac.build(&map);
|
||||
|
||||
ASSERT_NEAR(-10, nm.getBBox().getMin().x, 0.5);
|
||||
ASSERT_NEAR(-10, nm.getBBox().getMin().y, 0.5);
|
||||
ASSERT_NEAR( 0, nm.getBBox().getMin().z, 0.5);
|
||||
|
||||
ASSERT_NEAR(+10, nm.getBBox().getMax().x, 0.5);
|
||||
ASSERT_NEAR(+10, nm.getBBox().getMax().y, 0.5);
|
||||
ASSERT_NEAR( 0, nm.getBBox().getMax().z, 0.5);
|
||||
|
||||
ASSERT_EQ(45, nm.getNumTriangles());
|
||||
|
||||
|
||||
NavMeshRandom<NM::NavMeshTriangle> rnd = nm.getRandom();
|
||||
|
||||
for (int i = 0; i < 5000*1000; ++i) {
|
||||
NavMeshLocation<NM::NavMeshTriangle> loc = rnd.draw();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
TEST(NavMeshBenchmark, benchSubRegion) {
|
||||
|
||||
Floorplan::IndoorMap map;
|
||||
Floorplan::Floor floor; map.floors.push_back(&floor); floor.atHeight = 0; floor.height = 3;
|
||||
Floorplan::FloorOutlinePolygon outline; floor.outline.push_back(&outline);
|
||||
|
||||
// circle (many triangles)
|
||||
int i = 0;
|
||||
for (float f = 0; f < M_PI*2; f += 0.1) {
|
||||
const float x = std::cos(f) * 10;
|
||||
const float y = std::sin(f) * 10;
|
||||
outline.poly.points.push_back(Point2(x,y));
|
||||
++i;
|
||||
}
|
||||
|
||||
outline.outdoor = false;
|
||||
outline.method = Floorplan::OutlineMethod::ADD;
|
||||
|
||||
NavMeshSettings set;
|
||||
NavMesh<NM::NavMeshTriangle> nm;
|
||||
NavMeshFactory<NM::NavMeshTriangle> fac(&nm, set);
|
||||
fac.build(&map);
|
||||
|
||||
ASSERT_NEAR(-10, nm.getBBox().getMin().x, 0.5);
|
||||
ASSERT_NEAR(-10, nm.getBBox().getMin().y, 0.5);
|
||||
ASSERT_NEAR( 0, nm.getBBox().getMin().z, 0.5);
|
||||
|
||||
ASSERT_NEAR(+10, nm.getBBox().getMax().x, 0.5);
|
||||
ASSERT_NEAR(+10, nm.getBBox().getMax().y, 0.5);
|
||||
ASSERT_NEAR( 0, nm.getBBox().getMax().z, 0.5);
|
||||
|
||||
ASSERT_EQ(45, nm.getNumTriangles());
|
||||
|
||||
std::minstd_rand gen(1337);
|
||||
std::uniform_real_distribution<float> dist(0, M_PI*2);
|
||||
|
||||
for (int i = 0; i < 50000; ++i) {
|
||||
const float f = dist(gen);
|
||||
const float x = std::cos(f) * 9;
|
||||
const float y = std::sin(f) * 9;
|
||||
NavMeshLocation<NM::NavMeshTriangle> loc = nm.getLocation(Point3(x,y,0));
|
||||
NavMeshSub<NM::NavMeshTriangle>(loc, 5);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -17,8 +17,9 @@ TEST(NavMeshFactory, build1) {
|
||||
outline.outdoor = false;
|
||||
outline.method = Floorplan::OutlineMethod::ADD;
|
||||
|
||||
NavMeshSettings set;
|
||||
NavMesh<NM::NavMeshTriangle> nm;
|
||||
NavMeshFactory<NM::NavMeshTriangle> fac(&nm);
|
||||
NavMeshFactory<NM::NavMeshTriangle> fac(&nm,set);
|
||||
fac.build(&map);
|
||||
|
||||
ASSERT_NEAR(0, nm.getBBox().getMin().x, 0.5);
|
||||
|
||||
@@ -18,11 +18,68 @@ TEST(NavMeshSub, build1) {
|
||||
outline.outdoor = false;
|
||||
outline.method = Floorplan::OutlineMethod::ADD;
|
||||
|
||||
NavMeshSettings set;
|
||||
NavMesh<NM::NavMeshTriangle> nm;
|
||||
NavMeshFactory<NM::NavMeshTriangle> fac(&nm);
|
||||
NavMeshFactory<NM::NavMeshTriangle> fac(&nm, set);
|
||||
fac.build(&map);
|
||||
|
||||
NavMeshLocation<NM::NavMeshTriangle> loc = nm.getLocation(Point3(1,1,1));
|
||||
nm.getLocation(Point3(1,1,0));
|
||||
nm.getLocation(Point3(8,0.2,0));
|
||||
nm.getLocation(Point3(0.2,8,0));
|
||||
nm.getLocation(Point3(4.5,4.5,0));
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
TEST(NavMeshSub, draw) {
|
||||
|
||||
Floorplan::IndoorMap map;
|
||||
Floorplan::Floor floor; map.floors.push_back(&floor); floor.atHeight = 0; floor.height = 3;
|
||||
Floorplan::FloorOutlinePolygon outline; floor.outline.push_back(&outline);
|
||||
outline.outdoor = false;
|
||||
outline.method = Floorplan::OutlineMethod::ADD;
|
||||
|
||||
// circle (many triangles)
|
||||
int i = 0;
|
||||
for (float f = 0; f < M_PI*2; f += 0.1) {
|
||||
const float x = std::cos(f) * 10;
|
||||
const float y = std::sin(f) * 10;
|
||||
outline.poly.points.push_back(Point2(x,y));
|
||||
++i;
|
||||
}
|
||||
|
||||
|
||||
Floorplan::FloorOutlinePolygon remove; floor.outline.push_back(&remove);
|
||||
remove.outdoor = false;
|
||||
remove.method = Floorplan::OutlineMethod::REMOVE;
|
||||
remove.poly.points.push_back(Point2(-2,-2));
|
||||
remove.poly.points.push_back(Point2(+2,-2));
|
||||
remove.poly.points.push_back(Point2(+2,+2));
|
||||
remove.poly.points.push_back(Point2(-2,+2));
|
||||
|
||||
NavMeshSettings set;
|
||||
NavMesh<NM::NavMeshTriangle> nm;
|
||||
NavMeshFactory<NM::NavMeshTriangle> fac(&nm, set);
|
||||
fac.build(&map);
|
||||
|
||||
NavMeshRandom<NM::NavMeshTriangle> rnd = nm.getRandom();
|
||||
|
||||
for (int i = 0; i < 1000; ++i) {
|
||||
NavMeshLocation<NM::NavMeshTriangle> loc = rnd.draw();
|
||||
ASSERT_TRUE(loc.tria->contains(loc.pos));
|
||||
|
||||
NavMeshSub<NM::NavMeshTriangle> sub2(loc, 5);
|
||||
NavMeshRandom<NM::NavMeshTriangle> rnd2 = sub2.getRandom();
|
||||
for (int j = 0; j < 100; ++j) {
|
||||
NavMeshLocation<NM::NavMeshTriangle> loc2 = rnd2.draw();
|
||||
ASSERT_TRUE(loc2.tria->contains(loc2.pos));
|
||||
ASSERT_TRUE(sub2.contains(loc2.pos));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user