有一道面试题是:写一个方法用于判断一个圆和一个矩形是否相交。
这道题的解题思路应该是什么,我用了几种方法都有漏洞,希望不吝赐教。最好是用java写出来,其他语言也没问题,或者只介绍思路也行,多谢了。

解决方案 »

  1.   

    这个问题,不是初中的么?
    你首先需要有圆的坐标表示,肯定是(x-a.x)(x-b.x)+(y-a.y)(y-b.y)=r*r的形式,然后有矩形的表示肯定是四个线段。。
    然后分别用四条线带入圆公式,有解代表有焦点~~
    计算机的几何其实是建立在普通几何的基础上,在计算机中表示如果你没有写出特定的处理几何的类,那你就先在纸上把那些公式先化简,之后写进去运算就可以了
      

  2.   

    public Rectangle getRect() {
    return new Rectangle(x, y, WEIGHT, HEIGHT);
    }Rectangle碰撞检测
      

  3.   

    public Rectangle getRect() { 
    return new Rectangle(x, y, WEIGHT, HEIGHT); 
    } Rectangle碰撞检测
    就是这个  写游戏的时候这个经常用到
      

  4.   

    public Rectangle getRect(){
    return new Rectangle(x,y,WIDTH,HEIGTH);
    }this.getRect().intersects(t.getRect())
      

  5.   

    4、5、6楼说的方法不对啊,this.getRect().intersects(t.getRect())参数是一个rectangle,矩形跟矩形相交不一定矩形跟圆相交的嘛,你可以画个图,很明显的错误。
      

  6.   

    分别求圆心到矩形一边的两个端点和垂点的距离, 设为a,b,c 
    如果垂点在边线段外, 则检查(a-r)*(b-r),<=0则相交,否则不相交 
    如果垂点在边线段上, 则只有c<=r(=时相切), 且a或b>r才相交 分别检查4边 这种方法应该是正确的
      

  7.   

    还是老老实实判矩形的四个线段是否于与圆相交。线段的判法如下:假设圆心为(0,0)半径R 线段为 (x1,y),(x2,y) (假设是直线,若是斜线,先进行旋转)若 y的绝对值大于R ,肯定不相交。否则 计算(R^2 - y^2)^0.5  得到交叉点. a1(正),a2(负)
     if (a2<=x1 and x1<=a1) and (x2>a1 or x2<a2) then
                 相交
     else  if (a2<=x2 and x2<=a1) and (x1>a1 or x1<a2) then
                 相交
     else
                 不相交。分别算四段线段就可。
    可以把计算线段的部分做成函数调用四次,有1个相交就是相交。
      

  8.   

    今天面试人员给我说了一个方法:判断矩形一条边上的两个点是否一个在圆内,另外一点在圆外,这样就可以判断了。
    但是java中有这些类和方法吗?能否给出具体实现?