From 345bb237a7f682670a6107ae75afd948cc1f6ab6 Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 15 May 2022 15:37:59 +0200 Subject: Separated Wreck from Killmail --- Reader.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Reader.cpp (limited to 'Reader.cpp') diff --git a/Reader.cpp b/Reader.cpp new file mode 100644 index 0000000..f5c8de3 --- /dev/null +++ b/Reader.cpp @@ -0,0 +1,67 @@ +#include "Reader.h" + +#include +#include + +#include "Grid.h" +#include "LongVector3.h" +#include "Source.h" +#include "Wreck.h" + + +static constexpr long double SCALE {.0001}; +static constexpr long double EXTENT {1000 * 50000}; + + +static Grid& find_grid_for(std::vector& grids, const LongVector3& position); + + +std::vector +Reader::read(Source& source) +{ + std::vector grids; + for (auto& km : source.killmails()) { + auto& grid = find_grid_for(grids, km.position); + grid.wrecks.push_back(Wreck{Vector3{0, 0, 0}, km}); + } + for (auto& grid : grids) { + LongVector3 average {0, 0, 0}; + for (const auto& wreck : grid.wrecks) { + average.x += wreck.killmail.position.x; + average.y += wreck.killmail.position.y; + average.z += wreck.killmail.position.z; + } + const auto killmails = grid.wrecks.size(); + average.x /= killmails; + average.y /= killmails; + average.z /= killmails; + for (auto& wreck : grid.wrecks) { + wreck.position = { + static_cast((wreck.killmail.position.x - average.x) * SCALE), + static_cast((wreck.killmail.position.y - average.y) * SCALE), + static_cast((wreck.killmail.position.z - average.z) * SCALE), + }; + } + grid.origin = average; + } + return grids; +} + + +Grid& +find_grid_for(std::vector& grids, const LongVector3& position) +{ + for (auto& grid : grids) { + for (auto& wreck : grid.wrecks) { + const long double dist = + std::sqrt( + std::pow(position.x - wreck.killmail.position.x, 2) + + std::pow(position.y - wreck.killmail.position.y, 2) + + std::pow(position.z - wreck.killmail.position.z, 2)); + if (dist < EXTENT) + return grid; + } + } + grids.push_back(Grid{}); + return grids.back(); +} -- cgit v1.1