Как сделать больше полигонов
У меня есть полигон из класса 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), вы можете просто умножить вершины на любой желаемый масштаб, но в противном случае я бы порекомендовал масштабирование на основе расстояний вершин.