Java Graphics - 08 - Circle Rectangle Collisions

preview_player
Показать описание
This video will teach you how to handle collisions between a mix of rectangular and circular shapes.

This video is one of a multi-part series on teaching basic concepts of using graphics when programming in Java. I am a computer science and mathematics teacher at both the university and high school level. This series is designed around that curriculum. I hope these videos help you. Thanks for watching.

Video on rectangular collisions:

Video on circular collisions:

First episode on Java graphics:
Рекомендации по теме
Комментарии
Автор

```
private boolean calculateCollision(GOval ball, GRect brick) {
double ballRadius = ball.getWidth() / 2.0;
double centerX = ball.getX() + ball.getWidth() / 2.0;
double centerY = ball.getY() + ball.getHeight() / 2.0;

double rX = brick.getX();
double rY = brick.getY();
double rW = brick.getWidth();
double rH = brick.getHeight();

boolean circleAbove = (centerY < rY);
boolean circleBelow = (centerY > rY + rH);
boolean circleLeft = (centerX < rX);
boolean circleRight = (centerX > rX + rW);

if (circleAbove && circleLeft) {
return getDistance(centerX, centerY, rX, rY) < ballRadius;
} else if (circleAbove && circleRight) {
return getDistance(centerX, centerY, rX + rW, rY) < ballRadius;
} else if (circleAbove) {
return getDistance(centerX, centerY, centerX, rY) < ballRadius;
} else if (circleBelow && circleLeft) {
return getDistance(centerX, centerY, rX, rY + rH) < ballRadius;
} else if (circleBelow && circleRight) {
return getDistance(centerX, centerY, rX + rW, rY + rH) < ballRadius;
} else if (circleBelow) {
return getDistance(centerX, centerY, centerX, rY + rH) < ballRadius;
} else if (circleLeft) {
return getDistance(centerX, centerY, rX, centerY) < ballRadius;
} else if (circleRight) {
return getDistance(centerX, centerY, rX + rW, centerY) < ballRadius;
}

return true;
}

private double getDistance(double v1, double v2, double v3, double v4) {
return Math.sqrt(Math.pow(v1 - v3, 2) + Math.pow(v2 - v4, 2));
}
```

mrtintin
welcome to shbcf.ru