相关文章推荐
精明的大海  ·  oracle ora-06575-掘金·  1 年前    · 
乖乖的啄木鸟  ·  NYU联合Google ...·  1 年前    · 

分为矩形判定和叉积判定两步

step1:矩形判定

判断分别以两线段为对角线的两个矩形是否相交,若不相交,则两线段一定不相交。两个矩形是否相交的条件是:任一矩形的最右端都大于另一矩形的最左端,且任一矩形最高端大于另一矩形的最低端;只要其中任一条件不满足,则两矩形不相交,也即两线段不相交。
矩形判定:不相交

这一步判定不相交的两条线段直接返回 False

step2:叉积判定

经过上面判定未得到结果的两条线段那进入此步进行判定。

这一步的目的是确定一条线段的两个端点是否在另一线段的两侧,如果两条线段的端点互相位于另一条线段的两侧,则这两条线段相交。

  def cross(p1,p2,p3): # 叉积判定
    x1=p2[0]-p1[0]
    y1=p2[1]-p1[1]
    x2=p3[0]-p1[0]
    y2=p3[1]-p1[1]
    return x1*y2-x2*y1     
  def segment(p1,p2,p3,p4): #判断两线段是否相交
  #矩形判定,以l1、l2为对角线的矩形必相交,否则两线段不相交
    if(max(p1[0],p2[0])>=min(p3[0],p4[0]) #矩形1最右端大于矩形2最左端
    and max(p3[0],p4[0])>=min(p1[0],p2[0]) #矩形2最右端大于矩形1最左端
    and max(p1[1],p2[1])>=min(p3[1],p4[1]) #矩形1最高端大于矩形2最低端
    and max(p3[1],p4[1])>=min(p1[1],p2[1])): #矩形2最高端大于矩形1最低端
      if(cross(p1,p2,p3)*self.cross(p1,p2,p4)<=0  
        and cross(p3,p4,p1)*self.cross(p3,p4,p2)<=0):
      else:
    else:
    return D

线段与矩形相交的判定:

矩形的特殊之处在于其有 2 条对角线,小于其边数 4 。对于凸多边形,只要一条线段穿越矩形必定与某一条对角线相交。因此我们将线段与矩形相交问题转化为线段与矩形对角线的交点问题,为了排除特殊情况,在检测线段与对角线交点前,我们检测线段的两个端点是否在矩形内。

step1:检测线段端点是否在矩形内

step2:分别检测线段与矩形的两条对角线是否相交

def check(l1,l2,sq):
  # step 1 check if end point is in the square
  if ( l1[0] >= sq[0] and l1[1] >= sq[1] and  l1[0] <= sq[2] and  l1[1] <= sq[3]) or 
    ( l2[0] >= s1[0] and l2[1] >= s1[1] and  l2[0] <= sq[2] and  l2[1] <= sq[3]):
  return 1
  else:
    # step 2 check if diagonal cross the segment
    p1 = [sq[0],sq[1]]
    p2 = [sq[2],sq[3]]
    p3 = [sq[2],sq[1]]
    p4 = [sq[0],sq[3]]
    if segment(l1,l2,p1,p2) or segment(l1,l2,p3,p4):
      return 1
    else:
      return 0
s q = [ x l e f t d o w n , y l e f t d o w n , x r i g h t u p , y r i g h t u p ] A(ax,ay),B(px,py)为两个点 (x1,y1),(x2,y2)为 矩形 的左上角和右下角坐标 , 判断 A,B两点 是否 矩形 相交 def Judge(ax, ay, px, py, x1, y1, x2, y2): #转换为真除法 ax, ay, px, py = float(ax), float(ay), float(px), float(py) x1, y1, x2, y2 = float(x1), float(y1), float(x2), float(y2
python 判断 矩形 是否 相交 最近在进行图像处理,需要对 矩形 A[i]和 矩形 B[j]进行 是否 相交 判断 ,如果有 相交 则显示 矩形 B[j],无 相交 的部分只显示 矩形 A[i](i,j=0,1,2,…,n) 实现如下: 矩形 相交 如果存在以下两个 矩形 A和B,我们分别知道 矩形 A与 矩形 B左上角和右下角的坐标 计算A、B左上角坐标的最大值M=(max(Ax1,Bx1),max(Ay1,By1)(图片中M就等于 矩形 B...
def overlap(box1, box2): # 判断 两个 矩形 是否 相交 # 思路来源于:https://www.cnblogs.com/avril/archive/2013/04/01/2993875.html # 然后把思路写成了代码 minx1, miny1, maxx1, maxy1 = box1 minx2, miny2, maxx2, maxy2 = box2 minx = max(minx1, minx2) miny = max(mi.
判断 两个 矩形 是否 相交 Python 方法 在计算机图形学中, 判断 两个 几何 形状 是否 相交 是一个常见而重要的任务。 矩形 是最基础的 几何 形状之一,应用广泛,包括游戏开发、物体识别和碰撞检测等领域。本文将探讨如何 使用 Python 判断 两个 矩形 是否 相交 ,并提供相应的代码示例。 矩形 的表示 在计算机中,我们通常用左上角和右下角的...
1.给定两个坐标轴对齐的 矩形 判断 他们 是否 相交 ,如果 相交 ,给出他们所形成的 矩形 。 class Rectangle(object): #构造函数要求输入左下角坐标以及宽和高 def __init__(self,x,y,width,height): self.x = x self.y = y self.w = width self.h = height def isInterset(self,r):
在进行图像识别过程中,由于阈值设置、图片颜色等影响,识别结果会出现多个小块的 相交 矩形 ,影响最终结果展示。因此需要对图片中 相交 矩形 进行合并显示,显示 相交 矩形 的最小外接 矩形 方法 可能不够简便,仅是一种思路,供参考~ 判断 矩形 是否 相交 方法 参考上篇 如果存在以下几个 矩形 : 那么我最终想要的结果是显示这几个 相交 矩形 的最小外接 矩形 ,即蓝色 矩形 : 具体思路为: 1) 判断 两个 矩形 (A、B) 是否 相交 ; 2)若 相交 ,则新的左上角坐标loc1取两个 矩形 左上角坐标的最小值: loc1 = (min(Aloc1[i][0],
如何 判断 两个 矩形 相交 假定 矩形 是用一对点表达的(minx, miny) (maxx, maxy),那么两个 矩形 rect1{(minx1, miny1)(maxx1, maxy1)} rect2{(minx2, miny2)(maxx2, maxy2)} 相交 的结果一定是个 矩形 ,构成这个 相交 矩形 rect{(minx, miny) (maxx, maxy)}的点对坐标是: minx =
近期一次笔试中考到了这个题目,答题之后回来再看,发现网上的解答有些十分复杂,让人懒得去看。 隐约记得之前学习计算机图像学的课程时有这个算法。 我把自己的思路记下来,如有遗漏情况没有考虑或者 方法 有问题,欢迎拍砖:P 问题定义:给定两个边与坐标轴平行的 矩形 ,分别由左上角与右下角两点指定,即 矩形 (P1,P2)与(P3,P4), 判断 矩形 是否 相交 。 我的思路:如下图所示,首先求出P1与P3点在X方
原理就不多说了 ,这里直接上代码,经过测试是没有问题,如有发现问题欢迎指正!def isIntersection(xmin_a, xmax_a, ymin_a, ymax_a, xmin_b, xmax_b, ymin_b, ymax_b): intersect_flag = True minx = max(xmin_a , xmin_b) miny = max(ymin_a