/**
* 計算橢圓和矩形是否相交
* (x/rx)^2 + (y/ry)^2 = 1;
* left is: (x*ry)^2 + (y*rx)^2
* right is: (rx*ry)^2
*
* if(left > right) out
* else in
* @param x0 - 橢圓圓心x
* @param y0 - 橢圓圓心y
* @param rx - 橢圓x軸半徑
* @param ry - 橢圓y軸半徑
* @param xmin - 矩形左上角x
* @param ymin - 矩形左上角y
* @param xmax - 矩形右下角x
* @param ymax - 矩形右下角y
* @return
*/
public static final boolean isColliside(int x0, int y0, int rx, int ry, int xmin, int ymin, int xmax, int ymax) {
//如果圓心點就在矩形內部, 那麼就直接返回true
if(isIntersect(x0, y0, x0, y0, xmin, ymin, xmax, ymax)) {
return true;
}
//首先找到矩形距離圓心的最近點
int x = x0, y = y0;
if(x < xmin) {
x = xmin;
} else if(x > xmax) {
x = xmax;
}
if(y < ymin) {
y = ymin;
} else if(y > ymax) {
y = ymax;
}
int dx = x - x0;
int dy = y - y0;
dx *= dx;
dy *= dy;
rx *= rx;
ry *= ry;
dx *= ry;
dy *= rx;
if( dx + dy <= rx*ry) {
return true;
}
return false;
}