#ifndef RAY2_H #define RAY2_H #include "misc.h" #include #include #include void dumpRay2(const WiFiRaytrace2D& rt, const DataMapSignal& dms); void ray2() { //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 = "/apps/SHL39.xml"; std::string file = "/mnt/data/workspaces/IndoorMap/maps/SHL39.xml"; Floorplan::IndoorMap* map = Floorplan::Reader::readFromFile(file); Floorplan::Floor* floor = map->floors[0]; Floorplan::AccessPoint* ap = floor->accesspoints[4]; const int gs_cm = 50; WiFiRaytrace2D rt(floor, gs_cm, ap->pos.xy()); std::chrono::time_point start = std::chrono::high_resolution_clock::now(); const DataMapSignal& dms = rt.estimate(); std::chrono::time_point end = std::chrono::high_resolution_clock::now(); auto result = std::chrono::duration_cast(end-start).count(); std::cout << "it took: " << result << " msec" << std::endl; if (1 == 1) {dumpRay2(rt, dms);} } void dumpRay2(const WiFiRaytrace2D& rt, const DataMapSignal& dms) { const char sep = ' '; int lines = 0; std::stringstream tmp; auto lambda = [&] (const float x, const float y, const DataMapSignalEntry& e) { const float min = -120; const float max = -40; float rssi = e.getMaxRSSI(); if (rssi > max) {rssi = max;} if (rssi > -100) { ++lines; const int v = ((rssi - min) / (max-min)) * 255; // color tmp << x << sep << y << sep << v << sep << v << sep << v << "\n"; } }; dms.forEach(lambda); /* std::ofstream out("/tmp/vm/grid.ply"); out << "ply\n"; out << "format ascii 1.0\n"; out << "comment VCGLIB generated\n"; out << "element vertex " << lines << "\n"; out << "property float x\n"; out << "property float y\n"; out << "property float z\n"; out << "property uchar red\n"; out << "property uchar green\n"; out << "property uchar blue\n"; out << "element face 0\n"; out << "property list uchar int vertex_indices\n"; out << "end_header\n"; out << tmp.str(); out.close(); */ std::cout << "lines: " << lines << std::endl; /* std::ofstream outHits("/tmp/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 // RAY2_H