`
wang_xudong
  • 浏览: 33823 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

判断两个矩形是否相交

阅读更多
具体的 java 实现如下,直接保存成 Rect.java 编译运行即可:
 

    public class Rect {
        private float x1;
        private float y1;
        private float x2;
        private float y2;

        public Rect(float x1, float y1, float x2, float y2)
        {
            // [Neo] 确保存储的点为 坐上坐标(x1, y1) 以及 右下坐标(x2, y2)
            float tmp;
            if(x1 > x2)
            {
                tmp = x1;
                x1 = x2;
                x2 = tmp;
            }

            if(y1 > y2)
            {
                tmp = y1;
                y1 = y2;
                y2 = tmp;
            }

            this.x1 = x1;
            this.y1 = y1;
            this.x2 = x2;
            this.y2 = y2;
        }

        /** 判断点是否在矩形范围内 */
        private boolean isPointInner(float x, float y)
{
        if(x > x1 && x < x2 && y > y1 && y < y2)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public float getLeftTopX() {return x1;}
    public float getLeftTopY() {return y1;}
    public float getRightBottomX() {return x2;}
    public float getRightBottomY() {return y2;}

    /** 判断与指定的矩形是否有交集 */
    public boolean isRectIntersect(Rect rect)
    {
        return (isPointInner(rect.getLeftTopX(), rect.getLeftTopY()) ||
                isPointInner(rect.getLeftTopX(), rect.getRightBottomY()) ||
                isPointInner(rect.getRightBottomX(), rect.getLeftTopY()) ||
                isPointInner(rect.getRightBottomX(), rect.getRightBottomY()));
    }

    public static void main(String argv[])
    {
        Rect rect1 = new Rect(1, 1, 3, 3);
        Rect rect2 = new Rect(2, 2, 4, 4);

        System.out.println("result: " + (rect1.isRectIntersect(rect2) || rect2.isRectIntersect(rect1)));
    }
}

    public class Rect {
        private float x1;
        private float y1;
        private float x2;
        private float y2;

        /**
         * 构造
         *
         * @param x1
         *            第一个点 x 坐标
         * @param y1
         *            第一个点 y 坐标
         * @param x2
         *            第二个点 x 坐标
         * @param y2
         *            第二个点 y 坐标
         */
        public Rect(float x1, float y1, float x2, float y2) {
            // [Neo] 确保存储的点为 左上坐标(x1, y1) 以及 右下坐标(x2, y2)
            float tmp;
            if (x1 > x2) {
                tmp = x1;
                x1 = x2;
                x2 = tmp;
            }

            if (y1 > y2) {
                tmp = y1;
                y1 = y2;
                y2 = tmp;
            }

            this.x1 = x1;
            this.y1 = y1;
            this.x2 = x2;
            this.y2 = y2;
        }

        public float getLeftTopX() {
            return x1;
        }

        public float getLeftTopY() {
            return y1;
        }

        public float getRightBottomX() {
            return x2;
        }

        public float getRightBottomY() {
            return y2;
        }

        /**
         * 判断是否与指定的矩形有交集
         *
         * @param rect
         *            另外的矩形
         * @return 是否
         */
        public boolean isRectIntersect(Rect rect) {
            return ((rect.getLeftTopX() > getLeftTopX() && rect.getRightBottomX() > getLeftTopX()) ||
                    (rect.getLeftTopX() < getLeftTopX() && rect.getRightBottomX() < getLeftTopX()) ||
                    (rect.getLeftTopY() > getLeftTopY() && rect.getRightBottomY() > getLeftTopY()) ||
                    (rect.getLeftTopY() < getLeftTopY() && rect.getRightBottomY() < getLeftTopY()));
        }

        public static void main(String argv[]) {
            Rect rect1 = new Rect(1, 1, 3, 3);
            Rect rect2 = new Rect(2, 2, 4, 4);

            System.out.println("result: " + (rect1.isRectIntersect(rect2)));
        }
    }
分享到:
评论
1 楼 marvell2012 2015-04-20  
出差

相关推荐

    flash判断旋转矩形是否相交

    判断任意位置旋转的矩形是否相交,相交输出true,否则输出false。

    C++判断矩形相交的方法

    主要介绍了C++判断矩形相交的方法,涉及C++针对平面坐标数学运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    提供的点是否在圆,矩形,多边形内部的方法.txt

    提供的点是否在圆,内部的方法 提供的点是否在矩形内部的方法 提供的点是否在多边形内部的方法

    代码判断两条线段是否相交(两种实现算法)

    编程实现了如何判断一个平面里的两条线段是否相交!

    Python判断直线和矩形是否相交的方法

    主要介绍了Python判断直线和矩形是否相交的方法,涉及Python坐标系下的直线与矩形相关运算,具有一定参考借鉴价值,需要的朋友可以参考下

    C# 快速计算两个矩形相交源码(修复版)

    基于C#开发的 可以判断矩形是否相交 和 计算出相交的矩形的源码。可以用VS打开运行。

    求两个矩形求范围交集的快速算法

    两个矩形相交有三种情况: 1. 相离,可以通过判断两个矩形的X最大值,最小值以及Y最大值,最小值的大小比较判定。(空间搜索外包矩形常用算法) 2. 包含与被包含,也是通过两个矩形的X最大值,最小值以及Y最大值,...

    openlayers3 多边形相交判断

    原文地址 http://www.cnblogs.com/topcss/p/3575248.html ,基于该作者的代码基础上进行简单修改,使其在openlayers3上可用,有兴趣可以去看一下

    使用图形界面分析矩形

    使用C语言通过调用Windows API开发的一个图形界面,可以计算矩形的面积和判断两个矩形是否相交

    python计算两个矩形框重合百分比的实例

    # 判断两个矩形是否相交 # box=(xA,yA,xB,yB) x01, y01, x02, y02 = box1 x11, y11, x12, y12 = box2 lx = abs((x01 + x02) / 2 - (x11 + x12) / 2) ly = abs((y01 + y02) / 2 - (y11 + y12) / 2) sax = abs...

    判断线段相交和求交点

    由于项目需要,写了两个函数,IsLineSegmentCross和GetCrossPoint,对于各种情况都能很好适应,并正确的求出交点。通过了各种测试,完美的实现个算法真不容易啊! 这个是连带一个MFC测试的程序工程VC6.0源码!

    矩形相交以及求出相交的区域的原理解析

    问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2)。

    Unity实现图形相交检测

    2D的图形相交检测能够满足大部分的需求,且可以拓展成为柱状的3D物体,2D比3D的计算复杂度会低很多,3D的图形检测原理与2D相似,本文会实现几个圆形与其他2D图形的相交检测:  1、圆形与圆形  2、圆形与胶囊体  3...

    做坦克游戏,学Java编程(五)-击毙坦克并实现爆炸效果.pdf

    java提供了一个Rectangle类,该类的intersects方法可以判断两个矩形是否相交。利用Rectangle类来判断子弹是否和坦克相交,从而实现击毁坦克的功能。坦克被击中后爆炸消失,消失的过程用一个动画效果来表示,这一爆炸效果...

    VB判断窗体内的两个物体是否相交

    内容索引:VB源码,其它类别,物体碰撞 VB判断窗体内的两个物体是否相交,以前有些朋友说想要物体碰撞监测,测试发现这个源码与其有点类似,它判断窗体中的两个矩形是否相交重叠在一起,点击按钮激活判断程序。

    计算几何常用算法 直线拐点判断 线段相交判断

    折线段的拐向判断 判断点是否在线段上 判断两线段是否相交 判断线段和直线是否相交 判断矩形是否包含点 \计算几何常用算法

    GIS面试题,希望大家喜欢

    对于任意两个矩形,空间上有包含、相离、相交三种空间关系,现要求设计一个算法判断两个矩形的空间关系,如果两个矩形相交,计算相交部分。 4. 某国土局需要建设一个综合管理信息平台以满足国土资源管理的业务需要...

Global site tag (gtag.js) - Google Analytics