some fixes [multithreading,..]
needed interface changes [new options] logger for android wifi-ap-optimization new test-cases
This commit is contained in:
@@ -40,7 +40,6 @@ public:
|
||||
|
||||
const int gs_cm = grid.getGridSize_cm();
|
||||
|
||||
|
||||
struct IntPos {
|
||||
int x_cm;
|
||||
int y_cm;
|
||||
|
||||
@@ -136,7 +136,7 @@ public:
|
||||
/** add the given floor to the grid */
|
||||
void addFloor(const Floorplan::Floor* floor, GridFactoryListener* listener = nullptr) {
|
||||
|
||||
Log::add(name, "adding floor " + floor->name, true);
|
||||
Log::add(name, "adding floor '" + floor->name + "'", true);
|
||||
if (listener) {listener->onGridBuildUpdateMinor("adding floor " + floor->name);}
|
||||
|
||||
const BBox2 bbox = getFloorOutlineBBox(floor->outline);
|
||||
@@ -148,6 +148,7 @@ public:
|
||||
|
||||
const int total = (x2-x1) / helper.gridSize();
|
||||
int cur = 0;
|
||||
int numNodes = 0;
|
||||
|
||||
// build grid-points for floor-outline
|
||||
for(int x_cm = x1; x_cm < x2; x_cm += helper.gridSize()) {
|
||||
@@ -169,10 +170,17 @@ public:
|
||||
if (grid.hasNodeFor(t)) {continue;}
|
||||
grid.add(t);
|
||||
|
||||
// debug
|
||||
++numNodes;
|
||||
|
||||
}
|
||||
|
||||
if (listener) {listener->onGridBuildUpdateMinor(total, ++cur);}
|
||||
|
||||
}
|
||||
|
||||
Log::add(name, "added " + std::to_string(numNodes) + " nodes");
|
||||
|
||||
// connect the g
|
||||
connectAdjacent(floor, z_cm);
|
||||
|
||||
@@ -225,9 +233,9 @@ public:
|
||||
}
|
||||
|
||||
/** connect all neighboring nodes located on the given height-plane */
|
||||
void connectAdjacent(const Floorplan::Floor* floor, const float z_cm) {
|
||||
void connectAdjacent(const Floorplan::Floor* floor, const int z_cm) {
|
||||
|
||||
Log::add(name, "connecting all adjacent nodes at height " + std::to_string(z_cm), false);
|
||||
Log::add(name, "connecting all adjacent nodes within floor '" + floor->name + "' (atHeight: " + std::to_string(z_cm) + "cm)", false);
|
||||
Log::tick();
|
||||
|
||||
// connect adjacent grid-points
|
||||
|
||||
@@ -86,8 +86,8 @@ public:
|
||||
KNN<KNNArray<std::vector<T>>, 3> knnStairs(knnArrStairs);
|
||||
|
||||
// probability adjustments
|
||||
Distribution::Normal<float> avoidWalls(0.0, 0.35);
|
||||
Distribution::Normal<float> favorDoors(0.0f, 0.5f);
|
||||
Distribution::Triangle<float> avoidWalls(0.0, 0.45f);
|
||||
Distribution::Normal<float> favorDoors(0.0f, 0.4f);
|
||||
Distribution::Normal<float> favorStairs(0.0f, 1.5f);
|
||||
|
||||
if (l) {
|
||||
@@ -120,20 +120,33 @@ public:
|
||||
// get the distance to the nearest stair
|
||||
const float distToStair_m = Units::cmToM(knnStairs.getNearestDistance( {n1.x_cm, n1.y_cm, n1.z_cm} ));
|
||||
|
||||
const bool useNormal = (distToWall_m < distToDoor_m && distToWall_m < distToStair_m);
|
||||
const bool useNormal = (distToWall_m*3.5 < distToDoor_m && distToWall_m*3.5 < distToStair_m);
|
||||
|
||||
// final probability
|
||||
n1.navImportance = 1.0f;
|
||||
n1.navImportance += favorDoors.getProbability(distToDoor_m) * 1.25f;
|
||||
n1.navImportance += favorStairs.getProbability(distToStair_m) * 30.5f;
|
||||
n1.walkImportance = 1.0f;
|
||||
//n1.walkImportance += favorDoors.getProbability(distToDoor_m) * 0.75f;
|
||||
n1.walkImportance += favorStairs.getProbability(distToStair_m) * 1.0f;
|
||||
|
||||
// use wall avoidance
|
||||
if (useNormal) {
|
||||
n1.navImportance -= avoidWalls.getProbability(distToWall_m) * 0.5f;
|
||||
n1.walkImportance -= avoidWalls.getProbability(distToWall_m) * 0.4f;
|
||||
}
|
||||
|
||||
|
||||
// navigation importance is calculated using other formulae
|
||||
n1.navImportance = 1.0f;
|
||||
if (useNormal) {
|
||||
n1.navImportance -= avoidWalls.getProbability(distToWall_m) * 0.4;
|
||||
}
|
||||
//n1.navImportance += favorDoors.getProbability(distToDoor_m) * 0.5;
|
||||
n1.navImportance += favorStairs.getProbability(distToStair_m) * 1.0;
|
||||
|
||||
|
||||
|
||||
|
||||
// sanity check
|
||||
Assert::isTrue(n1.navImportance >= 0, "detected negative importance. does not make sense!");
|
||||
Assert::isTrue(n1.walkImportance >= 0, "detected negative walk importance. does not make sense!");
|
||||
Assert::isTrue(n1.navImportance >= 0, "detected negative nav importance. does not make sense!");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ public:
|
||||
const Point3 p4 = quad.p4 * 100;
|
||||
|
||||
// get the z-value from one of the both triangles
|
||||
int z_cm;
|
||||
// int z_cm;
|
||||
float u,v,w;
|
||||
if (helper.bary(p, p1.xy(), p2.xy(), p3.xy(), u, v, w)) {
|
||||
sn.z_cm = p1.z*u + p2.z*v + p3.z*w;
|
||||
@@ -124,7 +124,7 @@ public:
|
||||
}
|
||||
|
||||
// this might lead to stairs the start slightly above the starting-floor
|
||||
// or end slightly below the ending floor. this would lead to DISCONNECTION!
|
||||
// or ending slightly below the ending floor. this would lead to DISCONNECTION!
|
||||
// therefore re-scale the z-values to ensure they start at floor1 and end at floor 2
|
||||
float minZ = +9999999;
|
||||
float maxZ = -9999999;
|
||||
|
||||
Reference in New Issue
Block a user