You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CGSRegionRef如何将任意区域表示为矩形并集?解析调试输出格式

CGSRegionRef调试输出格式解析

CGSRegionRef是AppKit内部未公开的CFType类型,核心功能是将任意区域分解为矩形的并集。下面结合你提供的代码和输出,拆解其调试日志的含义:

测试代码

CGRect rect1 = CGRectMake(0, 0, 50, 10);
CGRect rect2 = CGRectMake(0, 0, 5, 40);
CGSRegionRef out1, out2, out3;
CGSNewRegionWithRect(&rect1, &out1);
CGSNewRegionWithRect(&rect2, &out2);

CGSUnionRegion(out1, out2, &out3);

NSLog(@"%@", out3);

输出结果

#<CGSRegion 0x600003950630 [0 0 50 40]
         0 [0 50] 
        10 [0 5] 
        40 []
>

格式含义拆解

  1. 第一行#<CGSRegion 0x600003950630 [0 0 50 40]>

    • 0x600003950630是该CGSRegion对象的内存地址
    • [0 0 50 40]是区域的外接矩形(Bounding Box),即能完全包裹合并后区域的最小矩形,对应CGRectMake(0,0,50,40)
  2. 后续行是按y轴分段的扫描线记录,格式为[y坐标] [x起始 x结束],表示在当前y坐标到下一行y坐标的区间内,x方向的有效区域:

    • 0 [0 50]:y从0到10的区间内,x的有效范围是0到50,对应原矩形rect1的区域
    • 10 [0 5]:y从10到40的区间内,x的有效范围是0到5,对应原矩形rect2在y>10的部分
    • 40 []:结束标记,表示y=40及以上没有有效区域

这种表示法本质是把区域拆分为多个水平矩形条带的并集,两个条带组合起来就是你合并后的区域:CGRectMake(0,0,50,10) + CGRectMake(0,10,5,30)。


内容的提问来源于stack exchange,提问作者1110101001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:31:12