2017-10-19 145 views
1

我是一个完整的初学者,我已经在实践中进行了一个使用java的小型项目,并且我有点卡住了。我已经通过堆栈交换进行了浏览,但是我无法找到一个好的,新手友好的解释来说明如何在某种模式下绘制简单的多边形。在java中绘制六角形地图

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

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

我认识到,转置可能是做一个可怕的方式,我认为是一个特定的系统,让我在一定的X,Y COORDS根据需要,我会产生绘制多边形。

我的问题是:使用转置循环绘制一个大的200x80 hexmap是否可行?还是有更好的方法?我会很高兴把我朝正确的方向倾诉。

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); 
    } 
    } 
+0

你的问题是什么? – StephaneM

+0

哦,对不起。我正在寻找这种方式绘制完整的200x80十六进制地图的帮助。我正在试图将我的头包裹在一个循环中,该循环将以适当的模式绘制线条和列的正方形,但没有太多成功(尚未!)。 –

+0

sizeA是什么? sizeB? –

回答

0

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

我确定还有其他方法可以解决您的问题,但是我发现将事情分解为合理独立的块,理想情况下可以进行测试和验证以独立工作的块对我而言产生良好结果。