23、仅使用 complement() 和 intersection() 函数,为以下自由函数模板提供替代实现:template inline bool join (const Polygon_2 & pgn1 , const Polygon_2 & pgn2 ); template inline bool difference(const Polygon_2 & pgn1 , const Polygon_2 & pgn2 ); template inline bool symmetric_difference(const Polygon_2 & pgn1 , const Polygon_2 & pgn2 ); template inline bool oriented_side (const Polygon_2 & pgn1, const Polygon_2 & pgn2 ); 并比较包中提供的函数模板实现与你自己实现的性能。
需要根据布尔集合运算规则进行函数的替代实现,并通过编写性能测试代码来比较性能。
- `join` 可表示为对两个多边形补集取交集后再取补集;
- `difference` 可表示为第一个多边形与第二个多边形补集取交集;
- `symmetric_difference` 可表示为 (pgn1 与 pgn2 补集的交集) 并上 (pgn2 与 pgn1 补集的交集);
- `oriented_side` 较复杂,可能需根据点与多边形的位置关系结合补集和交集运算实现。
性能比较则需使用计时工具对两种实现进行测试。
24、开发一个名为 connect_holes_hor() 的函数模板,它具有如下返回类型和参数类型:template Output_iterator connect_holes_hor (const Polygon_with_holes_2 & pwh, Output_iterator oi ); 这个函数应该连接输入的带洞多边形对象的洞。结果,它应该计算一个跨越输入带洞多边形的外边界和内边界的点序列。它需要计算每个洞的最左