Как сделать больше полигонов

У меня есть полигон из класса Polygon. Как я могу сделать это больше или меньше. Я ищу функцию, как растут (int, int) для прямоугольника. Я не имею ни малейшего представления, как я могу это сделать.

Заранее спасибо!

@ извините за мой глупый вопрос без каких-либо подробностей.

Я делаю полигон, используя:

    private int[] xCoord = new int[50], yCoord= new int[50]; //Arrays containing the points of the polygon
    private int pointCt=0; //The number of points that have been input

Я щелкаю мышью в определенном месте, затем рисую линию

xCoord[pointCt] = arg0.getX();
yCoord[pointCt] = arg0.getY();
pointCt++;


    private void putLine(int x1,int y1,int x2,int y2)
    {
        Graphics g= getGraphics();
        g.drawLine(x1, y1, x2, y2);
        g.dispose();
    }

  polygon=new MyPolygon(xCoord,yCoord,pointCt);

Я точно не знаю, какую строку моего кода я должен публиковать, но я надеюсь, что этого достаточно. Мне просто нужен совет, как сделать большой многоугольник с бугорками на столе. Спасибо!

2 ответа

Эти операции лучше всего охватываются линейной алгеброй. Вы были бы хорошо обслужены, если освежить в памяти перемещение, вращение и масштабирование тела. Но...

Если у вас есть все данные вершин, и объект находится в начале координат (0, 0, 0), вы можете просто умножить все вершины на число - 2.0 сделает объект в два раза больше, 3.0 сделает это в три раза больше, 0.5 уменьшит его вдвое и т. д. Обязательно сделайте это для всех компонентов, поэтому, если у вас есть двумерный объект, убедитесь, что вы умножаете значения X и Y каждой из его вершин на одно и то же число.

Если объект не находится в начале координат, вы можете найти центр объекта (получив среднее значение по всем вершинам), перевести его в начало координат (вычитая центр из каждой позиции вершин), выполнить масштабирование (умножив как в предыдущем абзаце), и добавьте центр назад к каждой вершине.

Это лучший способ сделать то, что вам нужно - не нужно много обходиться с расстояниями или матрицами.

Если у вас есть доступ к данным о положении для вершин, просто рассчитайте расстояние между всеми вершинами и умножьте его на любой желаемый масштаб. (Например, на 20% больше, умножьте все расстояния на 1,20). Вы можете сделать это с помощью формулы расстояния. Math.sqrt((x2-x1)^2 + (y2-y1)^2)

Как только вы получите новое расстояние, просто добавьте разницу между старым расстоянием и новым расстоянием к x2 и y2, и у вас будут новые координаты вершины, и сделайте это для каждой вершины многоугольника. Если ваш полигон находится в начале координат (0, 0), вы можете просто умножить вершины на любой желаемый масштаб, но в противном случае я бы порекомендовал масштабирование на основе расстояний вершин.

Другие вопросы по тегам