圆和矩形相交

今天第一次写博客,把今天自己写的圆是否与矩形相交的程序记一记,自己使用Cocos2D-X写游戏时,才想着写出来的。

 

思路:1:先判断圆心是否在矩形中

   2:判断矩形四个点是否在圆中,如果矩形四个点不在圆中,可以排除圆心在矩形四个角区域外可能性。

   3:判断圆是否和矩形的四个边相交

 

程序代码如下:

//用于判断圆是否包含某个点

bool LeapCircle::containsPoint(const Point& pPoint) const {
  return (this->CircleOrigin.x-pPoint.x)*(this->CircleOrigin.x-pPoint.x)+(this->CircleOrigin.y-pPoint.y)*(this->CircleOrigin.y-pPoint.y) <= this->CircleRadius * this->CircleRadius;
}

//判断圆是否和矩形相交

bool LeapCircle::intersectsRect(const Rect& rect) const {
  bool intersect1 = rect.containsPoint(this->CircleOrigin);                     //圆心在矩形内?
  bool intersect2 = this->containsPoint(Point(rect.getMinX(), rect.getMinY())) ||
            this->containsPoint(Point(rect.getMinX(), rect.getMaxY())) ||
            this->containsPoint(Point(rect.getMaxX(), rect.getMinY())) ||
            this->containsPoint(Point(rect.getMaxX(), rect.getMaxY()));          //矩形四个点是否在园内?
  bool intersect3 = this->CircleOrigin.x<rect.getMinX() && this->CircleOrigin.y>rect.getMinY() && this->CircleOrigin.y<rect.getMaxY() && abs(this->CircleOrigin.x-rect.getMinX()) < this->CircleRadius;  //是否和矩形左边相交?
  bool intersect4 = this->CircleOrigin.x>rect.getMaxX() && this->CircleOrigin.y>rect.getMinY() && this->CircleOrigin.y<rect.getMaxY() && abs(this->CircleOrigin.x-rect.getMaxX()) < this->CircleRadius;  //是否和矩形右边边相交?
  bool intersect5 = this->CircleOrigin.y<rect.getMinY() && this->CircleOrigin.x>rect.getMinX() && this->CircleOrigin.x<rect.getMaxX() && abs(this->CircleOrigin.y-rect.getMinY()) < this->CircleRadius;  //是否和矩形下边相交?
  bool intersect6 = this->CircleOrigin.x>rect.getMaxY() && this->CircleOrigin.x>rect.getMinX() && this->CircleOrigin.x<rect.getMaxX() && abs(this->CircleOrigin.y-rect.getMaxY()) < this->CircleRadius;  //是否和矩形上边边相交?
  

  return intersect1 || intersect2 || intersect3 || intersect4 || intersect5 || intersect6;
}

posted @ 2014-11-15 22:35  make game  阅读(1207)  评论(0)    收藏  举报