Как построить сетку на основе треугольника в Java с помощью Swing.
Контекст:
Я искал это довольно долго; Я видел много вопросов во время моего поиска в Интернете.
Однако, как вы можете видеть; большинство из них сосредоточено только на одном Треугольнике. Я пытаюсь сделать сетку.
Проблема:
Ниже приведен скриншот моего текущего затруднительного положения. Я успешно сделал ряд треугольников, однако я явно сделал что-то не так. Расстояние между строками смещено.
(Извините за ссылку, это мой первый вопрос, у меня нет возможности публиковать встроенные изображения)
Фрагмент кода
Прошу прощения за продвинутость, этот код выглядит плохо написанным.
Это код, который я придумал для создания треугольной сетки.
for (int x = 0; x < board.width; x++) {
for (int y = 0; y < board.height; y++) {
int numberOfSides = 3;
double sideLength = cellSize;
if(y%2==0) {
if(x%2==0) {
Polygon triA = new Polygon();
for (int i = 0; i < numberOfSides; i++) {
triA.addPoint(
(int) ((cellSize) + (cellSize * x)
+ sideLength * Math.sin(i * 2 * Math.PI / numberOfSides)),
(int) ((cellSize) + (cellSize * y)
+ sideLength * Math.cos(i * 2 * Math.PI / numberOfSides))
);
}
g.setColor(Color.GREEN);
g.drawPolygon(triA);
} else {
Polygon triA = new Polygon();
for (int i = 0; i < numberOfSides; i++) {
triA.addPoint(
(int) ((cellSize) + (cellSize * x)
- sideLength * Math.sin(i * 2 * Math.PI / numberOfSides)),
(int) ((cellSize+sideLength/2) + (cellSize * y)
- sideLength * Math.cos(i * 2 * Math.PI / numberOfSides))
);
}
g.setColor(Color.RED);
g.drawPolygon(triA);
} else {
if(x%2==0) {
Polygon triA = new Polygon();
for (int i = 0; i < numberOfSides; i++) {
triA.addPoint(
(int) ((cellSize) + (cellSize * x)
- sideLength * Math.sin(i * 2 * Math.PI / numberOfSides)),
(int) ((cellSize+cellSize) + (cellSize * y)
- sideLength * Math.cos(i * 2 * Math.PI / numberOfSides))
);
}
g.setColor(Color.YELLOW);
g.drawPolygon(triA);
} else {
Polygon triA = new Polygon();
for (int i = 0; i < numberOfSides; i++) {
triA.addPoint(
(int) ((cellSize) + (cellSize * x)
+ sideLength * Math.sin(i * 2 * Math.PI / numberOfSides)),
(int) ((cellSize+cellSize/2) + (cellSize * y)
+ sideLength * Math.cos(i * 2 * Math.PI / numberOfSides))
);
}
g.setColor(Color.BLUE);
g.drawPolygon(triA);
}
}
Очевидные проблемы
Итак, основной проблемой на данный момент является размер и расстояние между треугольниками. Мой код явно не самый лучший в мире, и я уверен, что есть гораздо более простые решения. Это изображение ниже - это то, что я пытаюсь воспроизвести:
Вот моя конечная цель. Я не хочу делать маленькую сетку, как на этом изображении , но используя те же правила для строк, я хотел бы создать треугольную сетку, которая заполнит всю доску. В этом сценарии мы можем предположить, что это либо JPanel, либо JFrame.
Цель этой цели?
Еще раз прошу прощения за неконкретность этого вопроса. Я пытаюсь построить треугольную сетку для некоторых исследований, которые я провожу в клеточных автоматах. Фрагмент кода, который я предоставил, когда-то был создан на основе созданного мной метода генерации шестиугольной сетки. Я изменил переменную numberOfSides на три и скорректировал переменную sideLength, чтобы попытаться удалить интервал. Вот и возникла моя проблема.
Для тех, кто заинтересован, вот ссылка на блог ученого-компьютерщика, посвященного треугольным клеточным автоматам. Я хочу повторить их результаты однажды. Треугольная игра жизни Жизнь
Конец примечания
Я был бы очень признателен за некоторые советы о том, как построить сетку треугольников. Я уверен, что есть гораздо более точные методы, такие как использование DrawLine. Также буду признателен за отзыв по моему вопросу. Это мой первый вопрос о Stackoverflow после довольно долгого использования сайта. Я постараюсь следить за этим постом в течение дня, если у кого-то возникнут ко мне вопросы.