From 9a4b7db288446c279e8920d8575d52f5b5be6e7f Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sun, 8 May 2016 21:05:42 +0200 Subject: Implement _manhattan metric_ Changed metric parameter types to int as `std::size_t` behaved weirdly during math operations. --- example.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/example.cc b/example.cc index e4d7420..a62fc48 100644 --- a/example.cc +++ b/example.cc @@ -3,14 +3,18 @@ #include #include -double metric(std::size_t refX, std::size_t refY, std::size_t x, std::size_t y) { +double euclidean_metric(int refX, int refY, int x, int y) { return std::sqrt( - (refX - x)*(refX - x) + (refY - y)*(refY - y) + std::pow(refX - x, 2) + std::pow(refY - y, 2) ); } +int manhattan_metric(int refX, int refY, int x, int y) { + return std::abs(refX - x) + std::abs(refY - y); +} + int main(int, char*[]) { - using refpos = std::tuple; + using refpos = std::tuple; std::array ref{ refpos(100, 50, imgen::color(255, 0, 0 )), @@ -29,8 +33,8 @@ int main(int, char*[]) { ref.begin(), ref.end(), [x, y](const refpos& a, const refpos& b) -> bool { - return metric(std::get<0>(a), std::get<1>(a), x, y) - < metric(std::get<0>(b), std::get<1>(b), x, y); + return manhattan_metric(std::get<0>(a), std::get<1>(a), x, y) + < manhattan_metric(std::get<0>(b), std::get<1>(b), x, y); } ); -- cgit v1.2.3