From 28331efb18a9700e556879e51915cd0ecb51ae79 Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Tue, 24 Oct 2017 10:29:10 +0200 Subject: Node elimination basics. --- src/math.hpp | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) (limited to 'src/math.hpp') diff --git a/src/math.hpp b/src/math.hpp index 55bf438..938241f 100644 --- a/src/math.hpp +++ b/src/math.hpp @@ -188,6 +188,16 @@ public: return r; } + vec_t ceil(void) + { + vec_t r; + + for (size_t i = 0; i < N; i++) + r[i] = std::ceil(v[i]); + + return r; + } + T len(void) { return std::sqrt(*this * *this); @@ -255,21 +265,33 @@ public: return v[i]; } - bool intersects(const rect_t &b) const + T dim(size_t i) const { - for (size_t i = 0; i < N; i++) - if (v[1][i] < b[0][i] || v[0][i] > b[1][i]) - return false; + return v[1][i] - v[0][i]; + } - return true; + rect_t norm(void) const + { + rect_t r; + + for (size_t i = 0; i < N; i++) { + r[0][i] = std::min(v[0][i], v[1][i]); + r[1][i] = std::max(v[0][i], v[1][i]); + } + + return r; } - T dim(size_t i) const + friend bool operator&&(const rect_t &a, const rect_t &b) { - return v[1][i] - v[0][i]; + for (size_t i = 0; i < N; i++) + if (a[1][i] < b[0][i] || a[0][i] > b[1][i]) + return false; + + return true; } - friend rect_t operator+(const rect_t &a, const rect_t &b) + friend rect_t operator|(const rect_t &a, const rect_t &b) { rect_t r; -- cgit