/* * Triangle2D.cpp * * Copyright (C) 2008 Matthias Schiffer * * 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 . */ #include "Triangle2D.h" #include 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; } } }