圆和矩形相交
今天第一次写博客,把今天自己写的圆是否与矩形相交的程序记一记,自己使用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;
}
浙公网安备 33010602011771号