JAVA Polygon 多边形相交校验的实践

实现方案

利用java se工具类来做 java.awt.Polygon

api地址: https://docs.oracle.com/javas...

使用到的api主要有:

public Polygon(int[] xpoints,int[] ypoints,int npoints)
Parameters:
xpoints - an array of X coordinates 所有点的x坐标
ypoints - an array of Y coordinates 所有点的y坐标
npoints - the total number of points in the Polygon 总共的点数
scene:
把商家通过地图拖拽的多边形各点传入进来,实例化Polygon对象

public boolean contains(double x,double y)
Parameters:
x - the specified X coordinate to be tested x坐标
y - the specified Y coordinate to be tested y坐标
scene:
获取用户当前定位的经纬度,作为x,y坐标系传入进行判断

使用示例

判断规则矩形包含点

    /**
     * 用例描述:测试场景 多边形为矩形 判断点是否在范围内
     */
    @Test
    public void test_rec_ContainsPoint(){
        try {
            int[] xpoints = {1,1,5,5};
            int[] ypoints = {1,5,5,1};
            Polygon polygon = new Polygon(xpoints, ypoints,4);

            boolean contains;

            Point p = new Point(2,2);
            contains = polygon.contains(p);
            Assert.assertTrue(contains);

            contains = polygon.contains(2, 2);
            Assert.assertTrue(contains);

            contains = polygon.contains(1, 4);
            Assert.assertTrue(contains);

            contains = polygon.contains(2, 2);
            Assert.assertTrue(contains);

            contains = polygon.contains(2.5, 2.5);
            Assert.assertTrue(contains);
        } catch (Exception e) {
            Assert.fail();
        }
    }

判断规则矩形包含矩形

    /**
     * 用例描述:测试场景 多边形为矩形 判断矩形是否在范围内
     */
    @Test
    public void test_rec_ContainsRectangle(){
        try {
            int[] xpoints = {1,1,5,5};
            int[] ypoints = {1,5,5,1};
            Polygon polygon = new Polygon(xpoints, ypoints,4);

            Rectangle2D rectangle = new Rectangle(2,2,1,1);
            boolean contains = polygon.contains(rectangle);
            Assert.assertTrue(contains);
        } catch (Exception e) {
            Assert.fail();
        }
    }

判断不规则图形包含点

    /**
     * 用例描述:测试场景 不规则多边形 包含点
     */
    @Test
    public void test_polygon_ContainsPoint(){
        try {
            int[] xpoints = {1,2,4,1,2};
            int[] ypoints = {3,4,3,3,2};
            Polygon polygon = new Polygon(xpoints, ypoints,5);
            boolean contains = polygon.contains(3, 3 );
            Assert.assertTrue(contains);

            contains = polygon.contains(2, 1);
            Assert.assertFalse(contains);
        } catch (Exception e) {
            Assert.fail();
        }
    }

判断交叉不规则多边形包含点

    /**
     * 用例描述:测试场景 交叉多边形 包含点
     */
    @Test
    public void test_crossing_ContainsPoint(){
        try {
            int[] xpoints = {1,2,1,3,3};
            int[] ypoints = {1,2,3,3,1};
            Polygon polygon = new Polygon(xpoints, ypoints,5);
            boolean contains = polygon.contains(2, 2 );
            Assert.assertTrue(contains);

            contains = polygon.contains(2, 1 );
            Assert.assertTrue(contains);

            contains = polygon.contains(2, 1.5);
            Assert.assertTrue(contains);

            contains = polygon.contains(2.5, 2.5 );
            Assert.assertTrue(contains);

            //多边形外围
            contains = polygon.contains(0, 1);
            Assert.assertFalse(contains);

            contains = polygon.contains(1, 2);
            Assert.assertFalse(contains);

            contains = polygon.contains(3, 2);
            Assert.assertFalse(contains);
        } catch (Exception e) {
            Assert.fail();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值