/* * 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].y() + vertices[1].y())*(vertices[0].x()-vertices[1].x()) + (vertices[1].y() + vertices[2].y())*(vertices[1].x()-vertices[2].x()) + (vertices[2].y() + vertices[0].y())*(vertices[2].x()-vertices[0].x()))/2; } bool Triangle2D::contains(const vmml::vec2f &v) const { for(int i = 0; i < 3; ++i) { vmml::vec2f v1 = vertices[(i+2)%3] - vertices[(i+1)%3]; vmml::vec2f v2 = vertices[i] - vertices[(i+1)%3]; vmml::vec2f vp = v - vertices[(i+1)%3]; if((v1.x()*vp.y()-vp.x()*v1.y())*(v1.x()*v2.y()-v2.x()*v1.y()) < 0) return false; } return true; } } }