首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何获得多个相交的CGRect的不相交区域?

要获得多个相交的CGRect的不相交区域,可以通过以下步骤实现:

  1. 首先,确定所有相交的CGRect的交集区域。可以使用CGRectIntersection函数来计算两个CGRect的交集区域,并将其保存在一个新的CGRect变量中。
  2. 然后,使用CGRectDivide函数将交集区域从原始CGRect中剥离出来。这将返回两个CGRect数组,一个表示交集区域,另一个表示剩余的不相交区域。
  3. 如果还有其他相交的CGRect,重复步骤1和步骤2,直到处理完所有相交的CGRect。

以下是一个示例代码,演示如何获得多个相交的CGRect的不相交区域:

代码语言:txt
复制
import UIKit

func getDisjointRects(from rects: [CGRect]) -> [CGRect] {
    var disjointRects: [CGRect] = []
    var remainingRects = rects
    
    while !remainingRects.isEmpty {
        let currentRect = remainingRects.removeFirst()
        var intersectionRect = currentRect
        
        for i in 0..<remainingRects.count {
            let rect = remainingRects[i]
            intersectionRect = intersectionRect.intersection(rect)
            
            if intersectionRect.isNull || intersectionRect.isInfinite {
                continue
            }
            
            let dividedRects = CGRectDivide(currentRect, &intersectionRect, &currentRect, rect.height, .minYEdge)
            
            if !dividedRects.isEmpty {
                disjointRects.append(dividedRects[0])
            }
            
            if dividedRects.count > 1 {
                remainingRects.insert(dividedRects[1], at: i)
            }
        }
        
        if !intersectionRect.isNull && !intersectionRect.isInfinite {
            disjointRects.append(intersectionRect)
        }
    }
    
    return disjointRects
}

// 示例用法
let rect1 = CGRect(x: 0, y: 0, width: 100, height: 100)
let rect2 = CGRect(x: 50, y: 50, width: 100, height: 100)
let rect3 = CGRect(x: 75, y: 75, width: 100, height: 100)

let rects = [rect1, rect2, rect3]
let disjointRects = getDisjointRects(from: rects)

for rect in disjointRects {
    print(rect)
}

这段代码将打印出不相交的区域,即剩余的不相交区域。请注意,这只是一个示例实现,具体的实现方式可能因编程语言和具体的应用场景而有所不同。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,因此无法提供相关链接。但可以根据具体需求,在腾讯云的官方网站上查找相关产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何使用CGAL轻松检索两条相交多边形相交线

如何使用CGAL轻松检索两条相交多边形相交线(从第一个交点到最后一个交点)。看到图像澄清,绿线是我想要。...使用CGAL获取多边形相交线 Two intersecting polygons with intersection line 目前我使用下面的算法,在那里我得到交集多边形,然后发现这是两个多边形边界点...有人可以告诉我这是否是正确方法,或者指出如何更好地做到这一点。 来源 2017-08-02 D.J. Klomp A 回答 2 将两个多边形线段插入到2D排列中。然后找到具有度4顶点。...= arr.end_vertices(); ++it) { if (4 == it->degree()) ... } 可以避开“段”名单建设,而是直接将多边形细分成使用迭代器适配器安排...(这是纯粹通用编程,与CGAL无关。)

35240

用OpenGL绘制平滑着色三角形与相交区域混合着色

二、绕法 在绘制三角形过程中,三个顶点将三角形封闭过程是有序,即三角形构成路径具有方向性,我们把指定顶点时顺序和方向组合称为"绕法"。绕法是任何多边形图元一个重要特征。...一般默认情况下,OpenGL认为逆时针绕法多边形是正对着,这一特性对于希望给多边形正面和背面赋予不同物理特性十分有用。...多边形轮廓或者内部用单一颜色或许多不同颜色来填充处理方式成为明暗处理。...第一条规则是所有多边形都必须是平面的,也就是说,多边形所有顶点必须唯有一个平面上,不能在空间中扭曲 第二条规则是多边形边缘不能相交,而且多边形必须是凸。...六、相交区域混合着色 glBlendFunc( GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA ); // 是最常使用

2.2K110
  • ios 图像处理

    然而当我们 * 希望以最小消耗去绘制一个临时曲线时, 我们也许会临时增 * 大这个值, 来获得更快渲染速度. */ usesEvenOddFillRule -> //是否使用基偶填充规则 /**...然后我们对每一条和该射线相交路径进行统计, 统计规则是这样: 当路径是从右向左穿过射线时候, count++, 当路径是从左向右穿过射线时候, count--....当我们统计完所有相交路径后, 如果 count 不为0, 则该点是内部点, 该点所在封闭区域需要填充, 反之该点则是路径外部点. /**   * @param pattern: 该属性是一个 C...  *  一个最小矩形区域....该区域包含二次贝塞尔   *  曲线和三次贝塞尔曲线控制点.   */ @property (nonatomic, readonly) CGRect bounds; /**   * 该方法将会直接对路径中所有点进行指定放射

    1.6K30

    iOS(CGGeometry)几何类方法总结 原

    0)等效 const CGRect CGRectNull 空矩形,这个和零矩形并不相同,当我们返回两个不相交矩形交集时,会返回空矩形。...(CGFloat x, CGFloat y, CGFloat width, CGFloat height); 创建一个矩形 CGFloat CGRectGetMinX(CGRect rect); 获得矩形最左边...CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy); 创建一个内嵌矩形,中心和rect参数中心一样,dx,dy对应内嵌宽度和高度 比如...CGRect CGRectIntegral(CGRect rect) 根据一个矩形,返回四个参数都是整数矩形 CGRect CGRectUnion(CGRect r1, CGRect r2); 返回两个矩形并集...2 bool CGRectIntersectsRect(CGRect rect1, CGRect rect2); 判断矩形1和矩形2是否相交 CFDictionaryRef CGPointCreateDictionaryRepresentation

    92720

    Swift 自定义布局实现瀑布流视图

    今天我给大家带来这篇教程中,将演示如何实现一个自定义瀑布流布局方案,类似下图: 大家在这个过程中会学习到以下几个知识点: 1.关于自定义布局2.动态尺寸 Cell 处理3.计算和缓存布局属性 好了...那么,我们该如何来实现一个自定义布局呢!...] 动态尺寸 有的人会问,瀑布流视图惊艳之处就在于它每个 Cell 尺寸都是不一致,那如何生成动态高度 Cell 呢!...return layoutAttributeArray.filter { $0.frame.intersects(rect) } } 这个方法决定了哪些 item 在给定区域内是可见...,我们可以通过数组函数提供过滤方法 filter() ,检查之前计算布局属性是否与该可见区域相交,然后并把相交属性返回 好了,到这里关于瀑布流视图布局就讲完了,附上 WaterFallFlowLayout

    2.5K30

    一文帮你搞定H5、小程序、Taro长列表曝光埋点

    长列表(或滚动视图)中元素曝光埋点,关键是如何监听子元素“曝光”事件。“曝光”即元素进入到了屏幕可见区域,也就是能被用户看到了,这是人类直观视觉感受,那么如何用代码方式来判定呢?...right, bottom, left),用于对参照物区域范围进行调整(收缩或扩张); threshold:相交比例阈值,用于定制需要观察相交比例临界值;元素交集(相交比例)发生变化时并不是每次变化都会执行回调方法...入参说明:component一般需要传当前页面或组件实例;options可定义触发阈值、是否同时观测多个目标节点等信息 第二步:指定参照节点(参照区域) 不同于web端创建时指定,小程序端提供了两个单独接口用于指定参照节点..._observer.relativeTo('.scroll-view') 同样可以通过margins来对参照区域进行扩展(或收缩);如果有多个参照节点,则会取它们布局区域 交集 作为参照区域。...监听生效问题 由于Taro运行时机制,在Taro组件数据更新方法(例如setState)执行后立刻添加监听可能会生效,原因是对应由数据驱动小程序元素实例此时还未完成创建或挂载,需要添加延迟或在

    1.1K21

    UE4Unity绘制地图基础元素-面和体

    面数据通常以离散点串形式存储,因此渲染时最关注如何将其展现为闭合图形。 体可以理解为带有高度面,在地图中代表各种建筑,通常是由其顶部面数据和高度数据处理得到。...渲染基本单位是三角形,线是通过扩展线宽构造三角形后渲染,而面是通过将多边形拆分为多个三角形后渲染。...三角剖分解可能是唯一,任何一种剖分方式都能够渲染得到面,但细小三角形更容易使面中同一像素绘制多次,造成过度绘制(Overdraw),因此根据多边形特征做一些剖分次序调整可以作为一个优化点。...但对于需要实时处理动态数据来说,其需要遍历所有组合,尤其对于可能仅存在少量相交情况,冗余计算太多,因此可以引入时间复杂度更低相交判定算法进行处理。...商业转载请联系作者获得授权,非商业转载请注明出处。

    1.3K51

    线上教育系统开发中,tableview列表分区实现方式

    在各类线上教育系统中,往往会包含知识付费模块,这些模块中,网课章节通常会以列表方式展现。那么列表中分区构成是如何通过代码实现呢?...,如果设置这个的话,则原来背景色不会被覆盖     cell.backgroundColor = UIColor.clearColor;     // 创建一个shapeLayer CAShapeLayer...,是整个 cell bounds, 第二个参数是距左右两端距离,第三个参数是距上下两端距离 CGRect bounds = CGRectInset(cell.bounds, 0, 0); /...然后连接p1和p2为一条直线l1,连接初始点p到p1成一条直线l,则在两条直线相交处绘制弧度为r圆角。...CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);         // 终点坐标为右下角坐标点,把绘图信息都放到路径中去,根据这些路径就构成了一块区域

    78720

    Visionpro从小白到大佬,第一章了解工具名称和用途

    借助 VisionPro,用户可以通过任意相机或图像采集卡使用功能较强视觉软件。康耐视采集技术支持所有类型图像采集:模拟、数字、彩色、单色、区域扫描、线扫描、高分辨率、多通道和多路复用。...CogDataAnalysisTool 功能:数据分析工具 CogImageFileTool 功能:将获得图像保存至文件或从文件中获取图像 CogPatInspectTool 功能...功能:模板搜寻工具 CogToolBlock 功能:将多个工具组合在一起完成某个功能,接口简单且可重用 CogToolGroup 功能:将多个工具组合成一个逻辑集合 3、Calibration...CogColorExtractorTool 功能:从彩色图像中抽取像素来创建灰度图像 CogColorMatchTool 功能:检查某一块区域色彩 CogColorSegmenterTool...功能:从线扫相机获得图像 CogPixelMapTool 功能:定义输入图像与输出图像之间映射 CogPolarUnwrapTool 功能:将输出图像部分转换为输出图像 CogSobelEdgeTool

    11K55

    小程序之图片懒加载

    它是一个新API,叫做IntersectionObserver, 本文只讲解简单使用,了解更多请猛戳没错,就是点我 小程序里面给它定义是节点布局交叉状态API可用于监听两个或多个组件节点在布局位置上相交状态...里面设计概念主要有五个,分别为 参照节点:以某参照节点布局区域作为参照区域,参照节点可以有多个多个话参照区域取它们布局区域交集 目标节点:监听目标,只能是一个节点 相交区域:目标节点与参照节点相交区域...相交比例:目标节点与参照节点相交比例 阈值:可以有多个,默认为[0], 可以理解为交叉比例,例如[0.2, 0.5] 关于它API有五个,依次如下 1、createIntersectionObserver...它包含字段为 字段名 类型 说明 intersectionRatio Number 相交比例 intersectionRect Object 相交区域边界,包含 left 、 right 、 top...参照区域边界,包含 left 、 right 、 top 、 bottom 四项 time Number 相交检测时时间戳 我们主要使用intersectionRatio进行判断,当它大于0时说明是相交也就是可见

    1.1K40

    Android性能优化:手把手带你全面了解绘制优化

    影响性能 绘制性能好坏 主要影响 :Android应用中页面显示速度 2. 如何影响性能 绘制影响Android性能实质:页面的绘制时间 1个页面通过递归 完成测量 & 绘制过程 3....与 Fragment 对于1个ViewPager + 多个 Fragment 组成首页界面,若每个 Fragment 都设有背景色,即 ViewPager 则无必要设置,可移除 关于更多场景,...通过clipRect()设置原主布局显示范围 = 裁剪区域,使其仅在上图中红框区域(即阻碍抽屉布局区域)显示 // 从而避免过度绘制 canvas.clipRect...具体措施:若判断与矩形相交,则可跳过相交区域,从而减少过度绘制 4.4 其他优化方案 总结 至此,关于绘制优化方案讲解完毕。...作用 可视化获得UI布局设计结构 & 各种属性信息,帮助我们优化布局设计 即 :方便查看Activity布局,各个View属性、布局测量-布局-绘制时间 具体使用 Hierarchy Viewer

    74420

    图形遍历效率低?试试 R 树

    若不相交,其下节点也不会相交,该节点对应子树就不需要继续递归了; 若相交且为数据节点(叶子节点),将其放到 result 数组; 若是包含关系,其下所有数据节点放到 result 数组; 若相交但并不包含...直到可能相交节点遍历完结束,然后返回 result 数组。...相交包含关系,继续判断相交 else nodesToSearch.push(child); } } node = nodesToSearch.pop...四叉树将视口界面分割成多个区域,每个区域记住自己包含了哪些图形。 然后移动目标图形时,判断它落在哪个区域,取出所在区域图形,这些图形集合就是和目标图形发生碰撞图形超集。...当一个区域图形数量过多时,又会进行分裂,再次分成 4 个区域

    30610

    【笔记】《计算机图形学》(4)——光线追踪

    对于正交投影,视线是最容易计算。视线方向都是-w,视线起点则是由投影面的像素位置决定,所以重点就转化为了如何确定投影面的位置。...由于将多边形投影到轴面上可能导致判断精准例如投影后多边形很多顶点重叠缩为一条线,这里我们可以在投影前进行一次预判断,将多边形往三个轴面都进行一次投影,然后找出投影后剩余可判断顶点数量最多轴面来进行计算...在实际生活中,物体通常不会只受到一个光照影响,而是常常有周围间接反射光线将没有被直接照亮区域照亮。...多个光源明暗。对于一个复杂场景常常需要多个直接照射光源,这种情况其实很好处理,只要保持环境光项不变,然后将其他明暗项叠加起来即可,出现多个高光也是符合物理规律 ?...,这样视线称为阴影射线 前面的明暗着色部分说到没有被直接光照部分我们对其进行环境光着色,这个想法延续下来就是阴影覆盖区域(没有光线照射区域)我们只进行环境光着色,其余区域进行正常着色。

    2.5K20

    麻麻,证明题太难了!!!

    一个点产生一个区域(圆内部);两点形成两个区域;三个点划分出了四个区域;4个和5个点分别产生8个和16个区域。...孪生素数是一对相差2素数对,例如,3和5、11和13、101和103都是孪生素数对。孪生素数猜想假设存在无穷多个素数对。...得益于后来一个公开“博学者”项目,我们现在知道有无穷多对质数相差超过246。我们还没有证明有无穷多对质数相差2,也就是孪生质数猜想。但比起无穷大来说,246已经很接近2了。...假设我们想研究这个命题:任意两条直线相交或平行。 我们说相交”是指这两条线有一个共同点,而说“平行”是指它们沿着同一方向上延长,但不相交。...就像我们看到垂直线一样,我们模型排除了我们无法想象东西。 这是一个简单例子,使用了一个有很多问题愚蠢模型,包括我们如何从无限集合中选择随机数这样麻烦问题。

    68510

    Android性能优化:这些绘制优化你一定不能忽略!

    .jpg] 场景2:ViewPager 与 Fragment 对于1个ViewPager + 多个 Fragment 组成首页界面,若每个 Fragment 都设有背景色,即 ViewPager 则无必要设置...若是左抽屉布局 // 则取抽屉布局右边界作为裁剪区左边界、设置原主布局裁剪区域,如上图裁剪区域 if (checkDrawerViewAbsoluteGravity(v, Gravity.LEFT...通过clipRect()设置原主布局显示范围 = 裁剪区域,使其仅在上图中红框区域(即阻碍抽屉布局区域)显示 // 从而避免过度绘制 canvas.clipRect(clipLeft..., 0, clipRight, getHeight()); } ...... } quickreject() 作用:判断和某个矩形相交 具体措施:若判断与矩形相交,则可跳过相交区域...作用 可视化获得UI布局设计结构 & 各种属性信息,帮助我们优化布局设计 即 :方便查看Activity布局,各个View属性、布局测量-布局-绘制时间 2.Profile GPU Rendering

    1K20

    Excel VBA解读(146): 使用隐式交集处理整列

    当Excel希望获得单个单元格引用但却提供给它单元格区域时,Excel会自动计算出单元格区域与当前单元格行或列相交区域并使用。例如下图1所示: ?...图1 在单元格B6中输入公式: =A:A 并不会返回整列A,而是返回第6行与列A相交单元格值f。...图2 然而,如果输入数组公式,就是告诉Excel想要获得多个值。...图3 如果在多个单元格中输入上述数组公式,则会获取多个值,如下图4所示,在单元格区域C5:C9输入上面的数组公式,会得到列A中前5个数据。 ? 图4 那么,对于函数Excel又是怎么处理呢?...例如,公式: =VLOOKUP(A4,$A:$C,3,false) 在列A至列C组成区域中精确查找单元格A4中内容,并返回列C中相应值。

    4.9K30

    在微信小程序中实现商品曝光统计

    如何统计商品曝光量 想要统计曝光量,其实只需要做两件事: 判断商品组件是否在屏幕(Viewport)内部 如果在屏幕内部,则将包含商品信息曝光事件(Event)发送到日志服务器 在原生App和web中都有相应成熟解决方案...relativeToViewport({bottom: 100}) .observe('.target-class', (res) => { res.intersectionRatio // 相交区域占目标节点布局区域比例...res.intersectionRect // 相交区域 res.intersectionRect.left // 相交区域左边界坐标 res.intersectionRect.top...// 相交区域上边界坐标 res.intersectionRect.width // 相交区域宽度 res.intersectionRect.height // 相交区域高度...最终结果就是在代码中,你无法获得失败状态,也就无法进行重试。失败状态被IntersectionObserver吞掉了 需要换个思路。

    3.3K10

    canvas进阶——实现Undo和Redo

    如果多个元素拥有相同 「tabindex」,它们相对顺序按照他们在当前DOM中先后顺序决定 OK,这下你应该明白了,我们要想canvas 可以聚焦, 但是直接加 tabindex = 0。...() 通过这两个 API 我们可以得到 Canvas 局部刷新方案: 清除指定区域颜色,并设置 clip 「所有同这个区域相交图形重新绘制」 example 为什么所有同这个区域相交图形都要重新绘制...因为2d图形都是由点组成,所以只要获得每一个图形离散点集合, 然后对这些点,去获得一个2d空间boundBox。 实现box2 「box2」 这个类属性其实就有一个min, max。...由于expandPoint, 这个方法存在。所以相当于不断去比较获取最大点 和最小点, 从而获得包围盒。...map 记录, 重画这个方法 主要是区域裁剪, 但是裁剪我们要去判断 当前图形是不是和其他图形有相交,如果有相交,我们需要扩大裁剪区域, 并且重画多个图形。

    84540
    领券