0

我是stackoverflow的新手,如果我的文本格式错误,我很抱歉。

我有一个要旋转给定角度的多边形。

void Polygon::rotateBy( const float cosx, const float sinx )
{
   for ( std::deque<PolygonPoint>::iterator i = point_list.begin(); i != point_list.end(); ++i )
    {
        i->x = (i->x * cosx) - (i->y * sinx);
        i->y = (i->x * sinx) + (i->y * cosx);
    }
}

这有一个非常意想不到的结果:

polygon.rotateBy(ccosx, csinx);

std::priority_queue<Edge, std::vector<Edge>, comparePolySegmentsByY> segments;
for(std::deque<PolygonPoint>::const_iterator i = (polygon.point_list.cbegin() + 1); i != polygon.point_list.cend(); ++i)
{
    segments.push(Edge(*(i-1), *i, i-1));
}
segments.push(Edge(polygon.point_list[ polygon.point_list.size() - 1 ], polygon.point_list[0], polygon.point_list.end() - 1));

comparePolySegmentsByY:

   class comparePolySegmentsByY
   {
    public:
    bool operator()(const Edge& pol1, const Edge& pol2) const
    {
        float t1 = pol1.getMinY() - pol2.getMinY();
        if ( abs(t1) > Eps ) 
            return t1 > 0;
        else
        {
            if ( abs( pol1.getMinX() - pol2.getMinX() ) < Eps )
            {
                if ( abs ( pol1.getMaxY() - pol2.getMaxY() ) < Eps )
                    return pol1.getMaxX() > pol2.getMaxX();
                else
                    return pol1.getMaxY() > pol2.getMaxY();
            }
            else
                return pol1.getMaxX() > pol2.getMinX();
        }
    }
 };

我使用 comparePolySegmentsByY 对优先级队列中的那些进行排序。此代码返回错误:

  Debug assertion failed: Invalid operator< 

当我在细分优先级列表中推动边缘时。如果我注释掉(删除)rotate 语句(但不是 rotateBy 函数)一切正常!我真的不知道这里发生了什么。

4

0 回答 0