zoukankan      html  css  js  c++  java
  • 检查两个长方形是否有重叠部分

    Question: You are given two axis-aligned rectangles. You have to determine if these rectangles overlap each other or not.
    Rectangle 1 : P1 (x, y), P2 (x,y)
    Rectangle 2 : P3 (x, y), P4 (x,y)

    这个问题给出两个长方形的坐标,问这两个长方形是否有重合部分。画出图来就是这样的:

    问题似乎有点复杂,如果你找出了复杂的一组条件表达式,肯定用了不少力气。有个简单的办法,试着从反面看这个问题。

    假设两个长方形分别有点(P1, P2)和点(P3, P4)表示。当两个长方体有重叠部分,肯定有一个长方体的一个角在另一个长方体的里面。看下面的图:

    现在重新看问题,似乎还是很复杂,难道要用8个条件表达式来表示?能不能简化问题?

    反面思考问题,袋子中有8个颜色各异的球,取不到黑球的概率是多少呢?我们先计算取出黑球的概率,在用1去减就行了。

    同样,两个长方形怎样才能不重叠呢?答案很简单:当一个长方形在另一个长方形的上下左右的时候。

    相应的条件表达式:

    ! ( P2.y < P3.y || P1.y > P4.y || P2.x < P3.x || P1.x > P4.x )

    用De Morgan’s law简化一下:

    ( P2.y <= P3.y && P1.y >= P4.y && P2.x >= P3.x && P1.x <= P4.x )

    是不是整洁多了?

  • 相关阅读:
    web-9. 动态网页与数据库-2
    web-9. 动态网页与数据库
    web-8. 多框架页面的创建
    web-7. 丰富页面的多媒体
    web-6. 组织页面的表格
    yocto术语二
    yocto术语
    linux source
    linux 添加环境变量
    ubuntu上网
  • 原文地址:https://www.cnblogs.com/programnote/p/4691608.html
Copyright © 2011-2022 走看看