В настоящее время ваш шестиугольник выглядит сверху и слева от позиции, которую вы бы хотели центрировать.Таким образом, добавляет одинаковое количество к каждому целому числу в x[]
и вычитает одинаковое количество из каждого целого числа в y[]
.Целые числа в этих массивах представляют собой координаты x и y вершин вашего шестиугольника.
Я бы просто попробовал случайные суммы, сузив точную сумму до сложения и вычитания.Например, на первый взгляд кажется, что вам нужно добавить 100 к x[]
и вычесть 20 из y[]
.Вы можете жестко закодировать значения:
int x[] = {375 + 100, 400 + 100, 450 + 100, 475 + 100, 450 + 100, 400 + 100};
int y[] = {150 - 20, 100 - 20, 100 - 20, 150 - 20, 200 - 20, 200 - 20};
Или вы можете сэкономить некоторое время, сужая значения и просто запустив цикл:
public void poligon(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Polygon pol;
// the x and y coordinates of the vertices of your hexagon
int x[] = {375, 400, 450, 475, 450, 400};
int y[] = {150, 100, 100, 150, 200, 200};
// how much to offset the x and y coordinates by
int xOffset = 100;
int yOffset = 20;
// offset your hexagon until you narrow down the right position
for(int i = 0; i < x.length; ++i)
x[i] += xOffset;
y[i] -= yOffset;
pol = new Polygon(x, y, x.length);
g2d.setPaint(Color.red);
g2d.fill(pol);
}
Примечание: Есть гораздо более простые способырассчитайте координаты центра, но с помощью предоставленного вами кода это единственное решение, которое я мог бы предоставить.