我是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 函数)一切正常!我真的不知道这里发生了什么。