Files
SAE31_2024/TestV2/src/fr/monkhanny/dorfromantik/utils/Hexagon.java

75 lines
2.0 KiB
Java

package fr.monkhanny.dorfromantik.utils;
import java.awt.Point;
import java.awt.Polygon;
public class Hexagon extends Polygon {
private static final int ANGLE_BETWEEN_VERTICES = 60;
/**
* Constructeur d'un hexagone
*
* @param x Position x du centre de l'hexagone
* @param y Position y du centre de l'hexagone
* @param radius Rayon de l'hexagone
* @param startAngle Angle de départ de l'hexagone
*/
public Hexagon(int x, int y, int radius, double startAngle) {
if (radius <= 0) {
throw new IllegalArgumentException("Le rayon doit être supérieur à zéro.");
}
for (int i = 0; i < 6; i++) {
double angleRad = calculateAngle(i, startAngle);
this.addPoint(
(int) (x + radius * Math.cos(angleRad)),
(int) (y + radius * Math.sin(angleRad))
);
}
}
/**
* Calcule l'angle en radians pour un sommet donné
*
* @param vertexIndex Index du sommet (0 à 5)
* @param startAngle Angle de départ
* @return Angle en radians
*/
private double calculateAngle(int vertexIndex, double startAngle) {
return Math.toRadians(vertexIndex * ANGLE_BETWEEN_VERTICES + startAngle);
}
/**
* Constructeur d'un hexagone
*
* @param center Centre de l'hexagone
* @param radius Rayon de l'hexagone
* @param startAngle Angle de départ de l'hexagone
*/
public Hexagon(Point center, int radius, double startAngle) {
this(center.x, center.y, radius, startAngle);
}
/**
* Constructeur d'un hexagone
*
* @param x Position x du centre de l'hexagone
* @param y Position y du centre de l'hexagone
* @param radius Rayon de l'hexagone
*/
public Hexagon(int x, int y, int radius) {
this(x, y, radius, 0);
}
/**
* Constructeur d'un hexagone
*
* @param center Centre de l'hexagone
* @param radius Rayon de l'hexagone
*/
public Hexagon(Point center, int radius) {
this(center.x, center.y, radius, 0);
}
}