diff options
Diffstat (limited to 'src/Math/Triangle2D.cpp')
-rw-r--r-- | src/Math/Triangle2D.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/Math/Triangle2D.cpp b/src/Math/Triangle2D.cpp new file mode 100644 index 0000000..035ecb3 --- /dev/null +++ b/src/Math/Triangle2D.cpp @@ -0,0 +1,47 @@ +/* + * Triangle2D.cpp + * + * Copyright (C) 2008 Matthias Schiffer <matthias@gamezock.de> + * + * This program 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. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "Triangle2D.h" +#include <cmath> + +namespace ZoomEdit { +namespace Math { + +float Triangle2D::area() const { + return std::fabs((vertices[0].getY() + vertices[1].getY())*(vertices[0].getX()-vertices[1].getX()) + + (vertices[1].getY() + vertices[2].getY())*(vertices[1].getX()-vertices[2].getX()) + + (vertices[2].getY() + vertices[0].getY())*(vertices[2].getX()-vertices[0].getX()))/2; +} + +bool Triangle2D::contains(const Vertex2D &v) const { + for(int i = 0; i < 3; ++i) { + Vector2D v1 = vertices[(i+2)%3] - vertices[(i+1)%3]; + Vector2D v2 = vertices[i] - vertices[(i+1)%3]; + + Vector2D vp = v - vertices[(i+1)%3]; + + if((v1.getX()*vp.getY()-vp.getX()*v1.getY())*(v1.getX()*v2.getY()-v2.getX()*v1.getY()) < 0) + return false; + } + + return true; +} + +} +} |