This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Indoor/tests/navMesh/TestNavMeshTriangle.cpp
k-a-z-u 3c72bc814c worked on nav-mesh
added dijkstra support for nav mesh
some minor changes to distributions
minor fixes
2018-01-17 16:36:37 +01:00

116 lines
2.9 KiB
C++

#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../navMesh/NavMeshTriangle.h"
using namespace NM;
TEST(NavMeshTriangle, uv_2D_on_2D) {
NavMeshTriangle t1(Point3(0,0,0), Point3(1,0,0), Point3(0,1,0), 1); // flat triangle
ASSERT_NEAR(0.5, t1.getArea(), 0.0001);
float u, v;
std::vector<float> testVals = {1.0,0.0, 0.0,1.0, 0.4,0.4, 0.8,0.1, 0.1,0.8, 0.3,0.6, 0.6,0.3};
// point -> uv -> point
for (size_t i = 0; i < testVals.size(); i+=2) {
Point2 pt1(testVals[i], testVals[i+1]);
t1.getUV(pt1, u, v);
Point3 pt2 = t1.getPoint(u,v);
ASSERT_NEAR(pt1.x, pt2.x, 0.0001);
ASSERT_NEAR(pt1.y, pt2.y, 0.0001);
}
}
TEST(NavMeshTriangle, uv_2D_on_3D) {
NavMeshTriangle t1(Point3(0,0,0), Point3(2,0,0), Point3(0,1,1), 1); // non-flat triangle
float u, v;
std::vector<float> testVals = {1.0,0.0, 0.0,1.0, 0.4,0.4, 0.8,0.1, 0.1,0.8, 0.3,0.6, 0.6,0.3};
// point -> uv -> point
for (size_t i = 0; i < testVals.size(); i+=2) {
Point2 pt1(testVals[i], testVals[i+1]);
t1.getUV(pt1, u, v);
Point3 pt2 = t1.getPoint(u,v);
ASSERT_NEAR(pt1.x, pt2.x, 0.0001);
ASSERT_NEAR(pt1.y, pt2.y, 0.0001);
}
}
TEST(NavMeshTriangle, uv_3D_on_3D) {
NavMeshTriangle t1(Point3(0,0,0), Point3(1,0,0), Point3(0,1,1), 1); // non-flat triangle
float u, v;
std::vector<float> testVals = {1.0,0.0,0.0, 0.0,1.0,1.0};
// point -> uv -> point
for (size_t i = 0; i < testVals.size(); i+=3) {
Point3 pt1(testVals[i], testVals[i+1], testVals[i+2]);
t1.getUV(pt1, u, v);
Point3 pt2 = t1.getPoint(u,v);
ASSERT_NEAR(pt1.x, pt2.x, 0.0001);
ASSERT_NEAR(pt1.y, pt2.y, 0.0001);
ASSERT_NEAR(pt1.z, pt2.z, 0.0001);
}
}
TEST(NavMeshTriangle, contains) {
NavMeshTriangle t1(Point3(0,0,0), Point3(1,0,0), Point3(0,1,0), 1);
ASSERT_TRUE(t1.contains(Point3(0,0,0)));
ASSERT_TRUE(t1.contains(Point3(1,0,0)));
ASSERT_TRUE(t1.contains(Point3(0,1,0)));
ASSERT_TRUE(t1.contains(Point3(0.5,0.5,0)));
ASSERT_FALSE(t1.contains(Point3(0.501,0.5,0)));
ASSERT_FALSE(t1.contains(Point3(0.5,0.501,0)));
ASSERT_FALSE(t1.contains(Point3(1,1,0)));
}
TEST(NavMeshTriangle, area) {
NavMeshTriangle t1(Point3(0,0,0), Point3(1,0,0), Point3(0,1,0), 1);
ASSERT_NEAR(0.5, t1.getArea(), 0.0001);
NavMeshTriangle t2(Point3(0,0,9), Point3(1,0,9), Point3(0,1,9), 1);
ASSERT_NEAR(0.5, t2.getArea(), 0.0001);
}
TEST(NavMeshTriangle, interpolate) {
NavMeshTriangle t1(Point3(0,0,0), Point3(1,0,0), Point3(0,1,0), 1);
ASSERT_NEAR(1.0f, t1.interpolate(Point3(0,0,0), 1.0, 2.0, 3.0), 0.001);
ASSERT_NEAR(2.0f, t1.interpolate(Point3(1,0,0), 1.0, 2.0, 3.0), 0.001);
ASSERT_NEAR(3.0f, t1.interpolate(Point3(0,1,0), 1.0, 2.0, 3.0), 0.001);
ASSERT_NEAR(1.5f, t1.interpolate(Point3(0.5,0,0), 1.0, 2.0, 3.0), 0.01); // between 1/2
ASSERT_NEAR(1.9f, t1.interpolate(Point3(0.9,0,0), 1.0, 2.0, 3.0), 0.01);
ASSERT_NEAR(2.0f, t1.interpolate(Point3(0,0.5,0), 1.0, 2.0, 3.0), 0.01); // between 1/3
ASSERT_NEAR(2.8f, t1.interpolate(Point3(0,0.9,0), 1.0, 2.0, 3.0), 0.01);
}
#endif