炮娘 发表于 2021-8-19 23:46

判断圆与图像是否相交

给你一个以 (radius, x_center, y_center) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2),其中 (x1, y1) 是矩形左下角的坐标,(x2, y2) 是右上角的坐标。如果圆和矩形有重叠的部分,请你返回 True ,否则返回 False 。换句话说,请你检测是否 存在 点 (xi, yi) ,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。输入:radius = 1, x_center = 0, y_center = 0(圆的半径下,有,轴坐标), x1 = 1, y1 = -1, x2 = 3, y2 = 1(X1,Y1为矩形左下角坐标,x2,y2为右上角坐标)输出:true解释:圆和矩形有公共点 (1,0)


public class checkOverLap {

    public static void main(String[] args) {
      checkOverLap checkOverLap = new checkOverLap();
      System.out.println(checkOverLap.souluteTool(1,1,1,1,2,-3,-1));
    }


    public boolean souluteTool(int radius, int x, int y, int x1, int x2, int y1, int y2) {
      // 1. 判断哪一点到圆心最近
      double distance = 10 * 10 * 10 * 10;
      for (int i = x1; i <= x2; i++) {
            for (int k = y1; k <= y2; k++) {
                int distance1 = Math.abs(x-i) * Math.abs(x-i) + Math.abs(y-k) * Math.abs(y-k);
                double distance2 = Math.sqrt(distance1);

                if (distance2<+distance){
                  distance=distance2;
                }
            }
      }
      // 最近的距离如果小于圆的半径 则相交
         if(distance<= radius){
             return true;
         }
         return false;


    }
}

艾莉希雅 发表于 2021-8-19 23:59

转换成以圆心极坐标系看点有没有比圆长度短的或者是直角坐标系直接把点带入看看有没有侵入圆

马云爱逛京东 发表于 2021-8-20 01:48

你这个类名跟对象名一样,不会报错吗?{:301_985:}

老衲不怕和尚 发表于 2021-8-20 09:09

好专业   学习了

quinMiaoMiao 发表于 2021-8-20 09:46

学习一下{:1_887:}

zd404039009 发表于 2021-8-20 10:12

恕我直言,这论坛迟早把沙雕CSDN弄死

ciker_li 发表于 2021-8-20 10:15


我觉得你这个方法效率有点低,步长是1,误差大
这个题就几种情况,判断一下比穷举快一些
1,圆心在矩形内,ture
2,圆心在矩形外,且x_c+r<x1 or y_c+r<y1 or x_c-r > x2 or y_c-r>y2, false
3, 圆与部分矩形相交,这个稍复杂些,就是写的多点,但肯定比穷举快

炮娘 发表于 2021-8-20 16:02

ciker_li 发表于 2021-8-20 10:15
我觉得你这个方法效率有点低,步长是1,误差大
这个题就几种情况,判断一下比穷举快一些
1,圆心在矩形 ...

对我最快想到的是这个 但是效率太低属于暴力流

炮娘 发表于 2021-8-20 16:05

艾莉希雅 发表于 2021-8-19 23:59
转换成以圆心极坐标系看点有没有比圆长度短的或者是直角坐标系直接把点带入看看有没有侵入圆

可以分情况如果圆心在内直接返回 return true

页: [1]
查看完整版本: 判断圆与图像是否相交