首页 > 解决方案 > polygon_90_data 和顶点的问题

问题描述

我创建了一个具有 5 个顶点的增强多边形,但是当我显示顶点或

#include <boost/polygon/polygon.hpp>
.
.
.

void displayPolygon(boost::polygon::polygon_90_data<int> const& polygon, std::string name)
{
    std::cout << std::endl << "polygon "  << name << std::endl;
    for (boost::polygon::polygon_90_data<int>::iterator_type it = polygon.begin(); it != polygon.end(); it++)
    {
        std::cout << (*it).x() << "/" << (*it).y() << "->";
    }
    std::cout << std::endl;
}
.
.
.
void testPolygon2()
{
    //typedef
    typedef boost::polygon::polygon_90_data<int> Polygon90Type;
    typedef std::vector<Polygon90Type> Polygon90Set;

    typedef boost::polygon::polygon_data<int> PolygonType;
    typedef std::vector<PolygonType> PolygonSet;
    typedef boost::polygon::point_data<int> PointType;
    typedef std::vector<PointType> PointSet;

    typedef boost::polygon::polygon_traits<Polygon90Type>::point_type Point;

    Polygon90Type polygon_1;

    Point pts_1[6] = { Point(0,0), Point(0,10), Point(5,12), Point(10,10), Point(10,0), Point(0,0)};

    polygon_1.set(pts_1, pts_1 + 6);
    std::cout << "polygon_1 area is " << boost::polygon::area(polygon_1) << std::endl;

    std::cout << std::endl << __LINE__ << " : 
    Polygon90Set polygonSet;

    polygonSet.push_back(polygon_1);
    //an attempt to see result of bloating with 0
    boost::polygon::bloat(polygonSet, 0, 0, 0, 0);

    std::cout << "nb polygon bloated " << polygonSet.size() << std::endl;
    for (auto polygon : polygonSet)
    {
        std::cout << std::endl << __LINE__ << "####################################" << std::endl;
        displayPolygon(polygon, "2 - after being bloated");

        std::cout << "area is " << boost::polygon::area(polygon) << std::endl;
    }
}

它与创建的多边形不对应的区域。面积应该是 110 但显示为 100?顶点应该是 (0,0), (0,10), (5,12), (10,10), (10,0) 但是是 (0/10), (5/10) ,(5/ 10)、(10/10)、(10/0)、(0/0)。看起来点 (/5/12) 已被取消并替换为点 (5/10)。我究竟做错了什么?谢谢。

标签: c++11boostpolygonboost-polygon

解决方案


推荐阅读