【发布时间】:2018-03-06 08:48:36
【问题描述】:
我正在寻找一种算法来获取网格中六边形的位置。 我找到了这个,但它无法正常工作:
for(int i = 0; i < width; i++) {
for(int j = 0; j < height; j++) {
grid[i][j] = new Hexagon(x+(j*((3*Hexagon.S)/2)), y+((j%2)*Hexagon.A)+(2*i*Hexagon.A));
}
}
输出有点奇怪: output
这是创建窗口的类(只是一个测试类):
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Grid extends JPanel {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
int width = 2;
int height = 4;
int x = 100;
int y = 100;
Hexagon[][] grid = new Hexagon[width][height];
JFrame f = new JFrame();
Container cp = f.getContentPane();
for(int i = 0; i < width; i++) {
for(int j = 0; j < height; j++) {
grid[i][j] = new Hexagon(x+(j*((3*Hexagon.S)/2)), y+((j%2)*Hexagon.A)+(2*i*Hexagon.A));
cp.add(grid[i][j]);
}
}
f.setLayout(null);
f.setBounds(100, 100, 300, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Hexagon.java 类:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import javax.swing.JButton;
public class Hexagon extends JButton {
public static final int S = 50;
public static final int A = (int) (Math.sqrt(3)*(S/2));
private static final long serialVersionUID = 1L;
private final int x, y;
private final Polygon shape;
public Hexagon(int x, int y) {
this.x = x;
this.y = y;
this.shape = initHexagon();
setSize(2*S, 2*A);
setLocation(x-S, y-A);
setContentAreaFilled(false);
}
private Polygon initHexagon() {
Polygon p = new Polygon();
p.addPoint(x+(S/2), y-A);
p.addPoint(x+S, y);
p.addPoint(x+(S/2), y+A);
p.addPoint(x-(S/2), y+A);
p.addPoint(x-S, y);
p.addPoint(x-(S/2), y-A);
return p;
}
protected void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
g.drawPolygon(this.shape);
}
protected void paintBorder(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLACK);
g2.setStroke(new BasicStroke(4));
g2.drawPolygon(this.shape);
}
public boolean contains(int x, int y) {
return this.shape.contains(x, y);
}
}
正如我所说,这个类使用非矩形形状工作得很好。 没有剪裁之类的。
【问题讨论】:
-
目前还不完全清楚问题是什么,以及
Hexagon类的来源。不过,我前段时间创建了一些hexagon utility classes,计算主要基于优秀网站redblobgames.com/grids/hexagons -
我有一个
x和一个y顶部坐标,最左边的六边形,我正在寻找一个算法来找到所有其他六边形的x和y值网格。 -
您能否发布一个可编译的代码 sn-p 设置窗口和所有这些东西,带有粉红色边框等?六边形的坐标很简单,但是用所有那些用于绘制多边形的 exitOnClose-blah 侦听器设置框架很烦人......
-
我已经添加了代码和我最近得到的新输出
-
添加
Hexagon类。 (它似乎扩展JComponent的事实可能已经是这里的一个主要问题。组件基本上假设为矩形,并且试图将它们挤压成六边形网格可能会造成麻烦。。 .)
标签: java jcomponent hexagonal-tiles