在java中绘制六边形地图

时间:2017-10-19 11:36:30

标签: java hexagonal-tiles

我是一个完全的初学者,我已经开展了一个小项目,在实践中使用java,我有点陷入困境。我已经通过堆栈交换浏览了但是我找不到关于如何以特定模式绘制简单多边形的好的,新手友好的解释。

重要的一点是,每个六边形都需要填充随机RGB颜色。这将稍后更改,RGB值将从CSV文件中读取,但在找出图块之前,我并不想过度复杂化代码。

这是我到目前为止所得到的。我需要在png中保存一个相当大的hexmap(200x80),但这是另一天的问题。

我意识到转置可能是一种可怕的方式,我认为这是一个允许我在某些x,y坐标处绘制多边形的特定系统,我会根据需要生成它。

我的问题是:使用转置循环绘制一个大的200x80十六进制图是否可行,还是有更好的方法?我很高兴能帮助我走向正确的方向。

int count = 0;
    super.paintComponent(g);            
    Polygon p = new Polygon();
    int hexSize = 100;
    int sizeA = (hexSize/3)*2;
    int sizeB = hexSize/3;


    //hexagon definition
    for (int i = 0; i < 6; i++)
        p.addPoint((int) (sizeA + sizeB * Math.cos(i * 2 * Math.PI / 6)),
          (int) (sizeA + sizeB * Math.sin(i * 2 * Math.PI / 6)));     

    //painting hexmap
    while (count<5) {
        int red = ThreadLocalRandom.current().nextInt(0, 255);
       int green = ThreadLocalRandom.current().nextInt(0, 255);
       int blue = ThreadLocalRandom.current().nextInt(0, 255);
        Color myColor = new Color(red, green, blue);
        g.setColor(myColor);
        count++;
        g.translate(49, 30);
        g.drawPolygon(p);
        g.fillPolygon(p);
    }
    }

1 个答案:

答案 0 :(得分:0)

我会通过编写一个方法来处理这个问题,该方法在某个点(x,y)和某个颜色c中绘制一个带顶点的六边形。然后使用一对嵌套的for()循环,外部循环控制行和内部列(反之亦然 - 几乎没有区别)。您需要一种方法来计算每个六边形所需的偏移量,并给出其行和列;也就是说,您需要一种将(行,列)转换为(x,y)的方法。但这只是三角学,如果你能绘制一个六边形,你就已经知道如何做到这一点。我相信你可以扩展你现有的方法 - 只需使用AWT方法转换预定义的形状 - 但我认为如果扩展到更复杂的问题会很难实现。

我确信还有其他方法可以解决您的问题,但我发现将其分解为合理的自包含块,理想情况下可以进行测试和验证以便独立工作的块,可以为我带来良好的效果。