From f45c5faf76282c93f7770019c684432e82a77d29 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Thu, 23 Jun 2011 22:04:51 +1000 Subject: [PATCH] Add basic 2 dimensional point classes --- Makefile.am | 2 ++ point.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ point.hpp | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 point.cpp create mode 100644 point.hpp diff --git a/Makefile.am b/Makefile.am index 317ce6b5..7e20a0b1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -18,6 +18,7 @@ UTIL_INCLUDE = \ maths.hpp \ matrix.hpp \ nocopy.hpp \ + point.hpp \ range.hpp \ region.hpp \ stream.hpp \ @@ -35,6 +36,7 @@ UTIL_FILES = \ json.cpp \ maths.cpp \ matrix.cpp \ + point.cpp \ range.cpp \ region.cpp \ stream.cpp \ diff --git a/point.cpp b/point.cpp new file mode 100644 index 00000000..fc9852e3 --- /dev/null +++ b/point.cpp @@ -0,0 +1,44 @@ +/* + * This file is part of libgim. + * + * libgim is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * libgim is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with libgim. If not, see . + * + * Copyright 2011 Danny Robson + */ + +#include "point.hpp" + +#include + +using namespace std; + + +point::point (double _x, double _y): + x (_x), + y (_y) +{ ; } + + +double +point::distance (const point &other) const { + return sqrt ((x - other.x) * (x - other.x) + + (y - other.y) * (y - other.y)); +} + + +double +point::manhattan (const point &other) const { + return fabs (x - other.x) + + fabs (y - other.y); +} diff --git a/point.hpp b/point.hpp new file mode 100644 index 00000000..0c33d953 --- /dev/null +++ b/point.hpp @@ -0,0 +1,34 @@ +/* + * This file is part of libgim. + * + * libgim is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * libgim is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with libgim. If not, see . + * + * Copyright 2011 Danny Robson + */ + +#ifndef __UTIL_POINT_HPP +#define __UTIL_POINT_HPP + +/// A two dimensional position in space +struct point { + double x, y; + + point (double x, double y); + + double distance (const point &) const; + double manhattan (const point &) const; +}; + + +#endif // __UTIL_POINT_HPP