您将获得一组矩形,并要求您确定由重叠矩形的轮廓形成的复杂多边形的周长。
答案 0 :(得分:2)
答案 1 :(得分:0)
. . . . . . . . . . . . . . . . * x x * . . . . . . . . x . . x . . . . . . . . x . . x . . . . . . * z * z . x . . . . . . z . x z . x . . . . . . z . x z . x . . . . . * * y y y y * y y * . . y z . x z . x . . y . . * * y y y y * y y * . . . z . x z . x . . . . . . z . x * x * . . . . . . z . . z . . . . . . . . * z z * . . . . . . . . . . . . . . . . . .
在上图中,我们有矩形x,y和z。星号是我们新多边形的外围角落。
答案 2 :(得分:0)
矩形轴是否对齐?如果是这样,你可以试试这个。排序沿一个轴开始和结束(让我们说x),然后保持一个连续间隔列表 - 按y排序的点,每个间隔有一个整数'绕组数' (最初是ymin..ymax,0)。然后当你沿着x处理下一个边缘时,你会发现它与之重叠的现有间隔,在末端分割出它们,然后更新(前边缘的++, - 后边缘的边缘)它们的缠绕数量。例如:
0000111111122222111000
+000++++++++++000000000
=0001222222233222111000
1 (perimeter update)
要打开边缘,请在周长上添加1号绕组的新间隔。关闭 - 为0.为了提高效率,您还可以合并具有相同绕组数的间隔。
然后为y做同样的事。