绝对定位的层判断是否有相互覆盖的解决算法

简介:

 这个算法我在上篇博文《jQuery 模拟 ubuntu 3D desktop 的 Dodge Effect 效果》中有提到过。

  但那时想法过于简单,当时的解决思路是只要层的一个角的坐标处于另一个层的所在区域,则窗口就会有覆盖。这一点没有错,但还有一些特殊情况。比如:

//       _______    _______          _____
//   ___|       |  |       |___    _|     |___
//  |   |       |  |       |   |  | |     |   |
//  |___|       |  |       |___|  |_|     |___|
//      |_______|  |_______|        |_____|
//      _____       ___________      _____
//   __|_____|__   |           |   _|_____|___
//  |           |  |           |  |           |
//  |           |  |___________|  |___________|
//  |___________|     |_____|       |_____|

  下面的代码需要配合上篇文章的代码看,我只提供核心的判断代码了

//  常规情况,只要有一个角处于区域内,则可以判断窗口有覆盖
//   _______            _______        _______    _______
//  |    ___|___    ___|       |   ___|___    |  |       |___
//  |   |       |  |   |       |  |       |   |  |       |   |
//  |___|       |  |   |_______|  |       |___|  |_______|   |
//      |_______|  |_______|      |_______|          |_______|
if (
     (thisStartX >= baseStartX && thisStartX <= baseEndX && thisStartY >= baseStartY && thisStartY <= baseEndY)
     ||
     (thisStartX >= baseStartX && thisStartX <= baseEndX && thisEndY >= baseStartY && thisEndY <= baseEndY)
     ||
     (thisEndX >= baseStartX && thisEndX <= baseEndX && thisStartY >= baseStartY && thisStartY <= baseEndY)
     ||
     (thisEndX >= baseStartX && thisEndX <= baseEndX && thisEndY >= baseStartY && thisEndY <= baseEndY)
){
     flag = true ;
}
//  非常规情况
//       _______    _______          _____
//   ___|       |  |       |___    _|     |___
//  |   |       |  |       |   |  | |     |   |
//  |___|       |  |       |___|  |_|     |___|
//      |_______|  |_______|        |_____|
if (
     (thisStartX >= baseStartX && thisStartX <= baseEndX && thisStartY < baseStartY && thisEndY > baseEndY)
     ||
     (thisEndX >= baseStartX && thisEndX <= baseEndX && thisStartY < baseStartY && thisEndY > baseEndY)
){
     flag = true ;
}
//      _____       ___________      _____
//   __|_____|__   |           |   _|_____|___
//  |           |  |           |  |           |
//  |           |  |___________|  |___________|
//  |___________|     |_____|       |_____|
if (
     (thisStartY >= baseStartY && thisStartY <= baseEndY && thisStartX < baseStartX && thisEndX > baseEndX)
     ||
     (thisEndY >= baseStartY && thisEndY <= baseEndY && thisStartX < baseStartX && thisEndX > baseEndX)
){
     flag = true ;
}

  至于还有两种情况,就是两个角处于区域内和四个角都在低层的区域内,这两种情况都必须满足第一个条件,就是一个角处于区域内,所以不用再次判断。




    本文转自胡尐睿丶博客园博客,原文链接:http://www.cnblogs.com/hooray/p/3193801.html,如需转载请自行联系原作者

相关文章
|
算法 JavaScript 前端开发
判断链表中是否又环使用JavaScript解决算法问题
判断链表中是否又环使用JavaScript解决算法问题
122 0
判断链表中是否又环使用JavaScript解决算法问题
|
算法 前端开发 JavaScript
【前端算法】判断一个字符串的括号是否成对匹配
使用typescript完成判断一个字符串的括号是否成对匹配的过程
|
C++ 计算机视觉
CV之FC:人脸识别之判断相似度极高的国内外明星根据人工智能算法(AP云)预测判别是否为同一个人
CV之FC:人脸识别之判断相似度极高的国内外明星根据人工智能算法(AP云)预测判别是否为同一个人
CV之FC:人脸识别之判断相似度极高的国内外明星根据人工智能算法(AP云)预测判别是否为同一个人
|
缓存 算法 Java
如何判断对象是否该被回收(引用计数法、可达性分析算法)
概述 垃圾收集器需要完那些内存需要回收? 什么时候回收? 如何回收?
78 0
如何判断对象是否该被回收(引用计数法、可达性分析算法)
|
算法 索引
【切图仔的算法修炼之旅】LeetCode141:判断链表是否有环
【切图仔的算法修炼之旅】LeetCode141:判断链表是否有环
78 0
【切图仔的算法修炼之旅】LeetCode141:判断链表是否有环
|
算法
判断三角形的性质(直角或等腰)简便算法
判断三角形的性质(直角或等腰)简便算法
96 0
|
算法
【牛客刷题-算法】NC4 判断链表中是否有环
【牛客刷题-算法】NC4 判断链表中是否有环
85 0
【牛客刷题-算法】NC4 判断链表中是否有环
|
算法 C语言
【牛客刷题-算法】NC141 判断是否为回文字符串
【牛客刷题-算法】NC141 判断是否为回文字符串
81 0
【牛客刷题-算法】NC141 判断是否为回文字符串
|
算法
分析复杂度来判断算法效率
算法复杂度用于分析算法运行所需计算机资源的量,需要的时间资源为时间复杂度,需要的空间资源为空间复杂度。 在判断一个算法的优劣时,可以抛开软件和硬件因素,只考虑问题的规模。编写程序前预先估计算法优劣,可以改进并选择更高效的算法。
123 0
分析复杂度来判断算法效率
|
算法
分析复杂度来判断算法效率
算法复杂度用于分析算法运行所需计算机资源的量,需要的时间资源为时间复杂度,需要的空间资源为空间复杂度。在我们判断一个算法的优劣时,可以抛开软件和硬件因素,只考虑问题的规模。编写程序前预先估计算法优劣,可以改进并选择更高效的算法。
113 0