#include "Collision.h" #include #include /*Default constructor*/ Collision::Collision(void) { } /*Destructor*/ Collision::~Collision(void) { } /*Square collision detection*/ bool Collision::isDetectCollision(const Square &squareToCompareOne, const Square &squareToCompareTwo) { return squareToCompareOne.getLeft() < squareToCompareTwo.getRight() && squareToCompareOne.getRight() > squareToCompareTwo.getLeft() && squareToCompareOne.getBottom() < squareToCompareTwo.getTop() && squareToCompareOne.getTop() > squareToCompareTwo.getBottom(); } /*Circle collision detection*/ bool Collision::isDetectCollision(const Circle &circleToCompareOne, const Circle &circleToCompareTwo) { float radius = circleToCompareOne.getRadius() + circleToCompareTwo.getRadius(); float x = circleToCompareOne.getOriginPositionX() - circleToCompareTwo.getOriginPositionX(); float y = circleToCompareOne.getOriginPositionY() - circleToCompareTwo.getOriginPositionY(); return (x * x + y * y) <= (radius * radius); } /*Circle to squre && square to circle collision detection*/ bool Collision::isDetectCollision(const Circle &circle, const Square &square) { // 1) First calculate the absolute values of the x and y difference between the center of the circle and the center of the rectangle. float circleCalculateDistanceX = abs(circle.getLeft() - square.getLeft()); float circleCalculateDistanceY = abs(circle.getBottom() - square.getBottom()); // 2) Second eliminate the easy cases where the circle is far enough away from the rectangle (in either direction) that no intersection is possible. if (circleCalculateDistanceX > (square.getLength() / 2 + circle.getRadius())) { return false; } if (circleCalculateDistanceY > (square.getLength() / 2 + circle.getRadius())) { return false; } // 3) Third handle the easy cases where the circle is close enough to the rectangle (in either direction) that an intersection is guaranteed. if (circleCalculateDistanceX <= (square.getLength() / 2)) { return true; } if (circleCalculateDistanceY <= (square.getLength() / 2)) { return true; } // 4) Forth calculate the difficult case where the circle may intersect the corner of the rectangle. float cornerDistance_sq = pow(circleCalculateDistanceX - square.getLength() / 2, 2) + pow(circleCalculateDistanceY - square.getLength() / 2, 2); return (cornerDistance_sq <= pow(circle.getRadius(), 2)); }