work on raytracing

This commit is contained in:
2017-09-06 08:34:20 +02:00
parent c21925e86f
commit e4cd9c6b8d
32 changed files with 2790 additions and 3 deletions

View File

@@ -0,0 +1,27 @@
#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../wifi/estimate/ray3/DataMap3.h"
TEST(DataMap3, test) {
BBox3 bbox(Point3(0,0,0), Point3(10,10,10));
DataMap3<float> dm;
dm.resize(bbox, 10);
dm.set(0,0,0, 10);
ASSERT_EQ(10, dm.get(0,0,0));
dm.set(0,5,0, 11);
ASSERT_EQ(11, dm.get(0,5,0));
dm.set(5,0,0, 12);
ASSERT_EQ(12, dm.get(5,0,0));
dm.set(0,0,5, 13);
ASSERT_EQ(13, dm.get(0,0,5));
}
#endif

View File

@@ -0,0 +1,22 @@
#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../wifi/estimate/ray3/ModelFactory.h"
#include "../../floorplan/v2/FloorplanReader.h"
#include <fstream>
TEST(Ray, ModelFac) {
std::string file = "/mnt/data/workspaces/IndoorMap/maps/SHL39.xml";
Floorplan::IndoorMap* map = Floorplan::Reader::readFromFile(file);
ModelFactory fac(map);
fac.triangulize();
std::ofstream out("/mnt/vm/fhws.obj");
out << fac.toOBJ() << std::endl;
out.close();
}
#endif

View File

@@ -0,0 +1,66 @@
#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../wifi/estimate/ray3/WifiRayTrace3D.h"
#include "../../floorplan/v2/FloorplanReader.h"
#include <fstream>
TEST(RayTrace3, test) {
//std::string file = "/mnt/data/workspaces/raytest2.xml";
//Floorplan::IndoorMap* map = Floorplan::Reader::readFromFile(file);
//Floorplan::AccessPoint* ap = map->floors[0]->accesspoints[0];
std::string file = "/mnt/data/workspaces/IndoorMap/maps/SHL39.xml";
Floorplan::IndoorMap* map = Floorplan::Reader::readFromFile(file);
Floorplan::AccessPoint* ap = map->floors[0]->accesspoints[4];
ModelFactory fac(map);
std::ofstream outOBJ("/mnt/vm/map.obj");
outOBJ << fac.toOBJ();
outOBJ.close();
const int gs_cm = 100;
WiFiRaytrace3D rt(map, gs_cm, ap->pos);
const DataMap3Signal& dms = rt.estimate();
const char sep = ';';
std::ofstream out("/mnt/vm/rays.xyz.txt");
auto lambda = [&] (const float x, const float y, const float z, const DataMap3SignalEntry& e) {
const float min = -120;
const float max = -40;
float rssi = e.getMaxRSSI();
if (rssi > max) {rssi = max;}
if (rssi > -100) {
const float v = ((rssi - min) / (max-min)) * 255;
out
<< x << sep << y << sep << z << sep
<< v << sep << v << sep << v
<< "\n";
}
};
dms.forEach(lambda);
out.close();
std::ofstream outHits("/mnt/vm/hits.xyz.txt");
for (const Point3 hit : rt.getHitEnter()) {
outHits << hit.x << sep << hit.y << sep << hit.z << sep << 0 << sep << 255 << sep << 0 << "\n";
}
for (const Point3 hit : rt.getHitLeave()) {
outHits << hit.x << sep << hit.y << sep << hit.z << sep << 0 << sep << 0 << sep << 255 << "\n";
}
for (const Point3 hit : rt.getHitStop()) {
outHits << hit.x << sep << hit.y << sep << hit.z << sep << 0 << sep << 0 << sep << 0 << "\n";
}
outHits.close();
}
#endif