102 lines
2.8 KiB
C++
102 lines
2.8 KiB
C++
#ifndef RAY2_H
|
|
#define RAY2_H
|
|
|
|
#include "misc.h"
|
|
|
|
#include <Indoor/wifi/estimate/ray2d/WiFiRayTrace2D.h>
|
|
#include <Indoor/floorplan/v2/FloorplanReader.h>
|
|
#include <fstream>
|
|
|
|
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<std::chrono::high_resolution_clock> start = std::chrono::high_resolution_clock::now();
|
|
const DataMapSignal& dms = rt.estimate();
|
|
std::chrono::time_point<std::chrono::high_resolution_clock> end = std::chrono::high_resolution_clock::now();
|
|
auto result = std::chrono::duration_cast<std::chrono::milliseconds>(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
|