Как позиционировать фигуру, используя координаты X и Y в графике Java? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь переместить красный шестиугольник в центр прямоугольника, на который указывает черная стрелка на изображении ниже.

I want to move the hexagon to the center

Я не могу найти гдепоставить координаты X и Y, хотя.

public void poligon(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    Polygon pol;

    int x[] = {375, 400, 450, 475, 450, 400};
    int y[] = {150, 100, 100, 150, 200, 200};

    pol = new Polygon(x, y, x.length);
    g2d.setPaint(Color.red);
    g2d.fill(pol);
}

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Я думаю, вы всегда вводите в свой пример координаты x и y, чтобы создать полигон.В вашем примере позиции x в точках многоугольника: 375, 400, 450, 475, 450, 400, а позиции y тех же точек - 150, 100, 100, 150, 200, 200.

Я бы попытался найти разницу между точками и сохранить ее.В вашем примере вы можете получить 375 в качестве базы для х.Таким образом, точка внутри массива будет:

int baseX = 375;
int x[] = {baseX, baseX + 25, baseX + 75, baseX + 100, baseX + 75, baseX + 25};

Пожалуйста, сделайте то же самое для y.После этого эксперимента с базой baseX и baseY.Таким образом, вы не сломаете свой многоугольник, и вы можете спокойно перемещать его.

Прекрасно проведите время за кодированием!

0 голосов
/ 27 сентября 2018

В настоящее время ваш шестиугольник выглядит сверху и слева от позиции, которую вы бы хотели центрировать.Таким образом, добавляет одинаковое количество к каждому целому числу в 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);
}

Примечание: Есть гораздо более простые способырассчитайте координаты центра, но с помощью предоставленного вами кода это единственное решение, которое я мог бы предоставить.

...