2013-05-28 7 views
1

У меня есть многогранник, гранями которого являются треугольники. Я знаю, что в CGAL класс Triangle_3 предлагает метод squared_area, через который мы можем вычислить площадь треугольника. Есть ли способ применить это к многогранным граням? Или какие-либо идеи относительно того, как рассчитать площадь каждой грани?CGAL: Как эффективно рассчитать площадь граней многогранника?

+0

Не знаком с CGAL, но одно из преимуществ треугольников является то, что можно быть уверенными, что они плоские, и, следовательно, они имеют довольно очевидную и хорошо определенную область. Как только у вас будет более 3 углов, плоскость может быть проблемой. Если вы уверены, что они плоские, вы можете использовать что-то вроде [link] (http://www.mathopenref.com/coordpolygonarea.html), чтобы найти область – Arunas

+0

Я просто перечитал это - вы имеете в виду «многогранные грани» или «полигональные грани»? – Arunas

+0

Полиэдральные грани. В любом случае я получил правильный ответ. Спасибо, что пытался помочь мне .. :) –

ответ

7

Вот пример:

#include <CGAL/Simple_cartesian.h> 
#include <CGAL/Polyhedron_3.h> 
#include <numeric> 
#include <functional> 
#include <boost/iterator/transform_iterator.hpp> 

typedef CGAL::Simple_cartesian<double> K; 
typedef CGAL::Polyhedron_3<K> Polyhedron; 

struct Compute_area: 
    public std::unary_function<const Polyhedron::Facet, double> 
{ 
    double operator()(const Polyhedron::Facet& f) const{ 
    return K::Compute_area_3()(
     f.halfedge()->vertex()->point(), 
     f.halfedge()->next()->vertex()->point(), 
     f.halfedge()->opposite()->vertex()->point()); 
    } 
}; 

int main() 
{ 
    Polyhedron p; 
    p.make_tetrahedron(
    K::Point_3(0,0,0), 
    K::Point_3(0,1,0), 
    K::Point_3(1,1,0), 
    K::Point_3(1,1,3) 
); 

CGAL_assertion(p.is_pure_triangle()); 

    Compute_area ca; 

    std::cout << 
    std::accumulate(
     boost::make_transform_iterator(p.facets_begin(), ca), 
     boost::make_transform_iterator(p.facets_end(), ca), 
     0.) 
    << std::endl; 
} 
+0

Спасибо !!! Это именно то, что я хотел ... –

Смежные вопросы