Вы можете разбить свой холст на 10 областей и ограничить каждый полигон своим собственным регионом. Для этого вы можете использовать ваше значение i
и %100
(или другую подходящую величину) вашего случайно сгенерированного значения и применить их к вашим координатам x и y, в зависимости от ситуации. Результатом будет сетка с аналогичным ограничением (не больше ячейки сетки), но произвольной формы, полигонов.
EDIT:
Взглянув по-другому и немного дурачась, я взял общую концепцию, как описано выше, и сделал попытку реализации:
public void paintComponent(Graphics g) {
int[] xCoord = new int[3];
int[] yCoord = new int[3];
int colCnt = 5;
int rowCnt = 2;
int maxCellWidth = getWidth() / colCnt;
int maxCellHeight = getHeight() / rowCnt;
for (int i = 0; i < (colCnt * rowCnt); i++) {
int xMultiple = i % colCnt;
int yMultiple = i / colCnt;
for (int j = 0; j < 3; j++) {
xCoord[j] = generator.nextInt(maxCellWidth)
+ (maxCellWidth * xMultiple);
yCoord[j] = generator.nextInt(maxCellHeight)
+ (maxCellHeight * yMultiple);
}
triangles.add(new Polygon(xCoord, yCoord, 3));
}
//... the rest of your method
}
Как видите, все полигоны имеют все точки, сгенерированные случайным образом, в отличие от вашего метода генерации первой точки, а затем создания остальных точек относительно первой. Однако возникает ощущение случайности, поскольку полигоны расположены в виде сетки.