проблема с polygon_90_data и вершинами - PullRequest
0 голосов
/ 11 января 2019

Я создаю полигон форсирования с 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). Что я делаю неправильно? спасибо.

...