Java - 如何填充三角形并旋转它? (多边形)

时间:2016-11-08 22:40:38

标签: java polygon paintcomponent graphics2d

所以我得到的这是一个三角形,但我该如何着色呢?我是Java的新手,所以请耐心等待。我还想稍后将其复制并粘贴在它旁边,然后将它旋转到它的头部。我想要构建的数字是Kite(你可以看到它主要构建在traingles的不同部分)。

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    this.setBackground(Color.yellow);

    //this is where the triangle starts
    g.setColor(Color.RED);
    g.drawPolygon(new int[] {40, 80, 120}, new int[] {100, 20, 100}, 3);

提前致谢!!!

1 个答案:

答案 0 :(得分:1)

您可以做的是将图形对象g转换为2D格式对象。例如:

Graphics2D g2 = (Graphics2D) g;

允许您使用Graphics2D包中包含的工具,您需要将其导入。然后,您可以创建三角形:

Polygon tri = new Polygon(new int[] {40, 20, 80}, new int[] {100, 20, 100}, 3);

接下来,您需要将三角形THETA度顺时针旋转到它的中心并创建它,填充:

g2.rotate(Math.toRadians(THETA), (140 / 3), (220 / 3));
g2.fill(tri);

这将创建由坐标{40,20,80}和{100,20,100}指定的三角形,旋转THETA度。我指定旋转的2个额外参数的原因是因为如果未指定旋转,它将围绕(0,0)旋转。 140 / 3只是x坐标的平均值,220 / 3是y坐标的平均值。如果你很好地了解几何体,你会发现它是三角形的质心。如果每次旋转的数量相同,则可以手动将THETA转换为弧度。但是,有另一种方法可以做到这一点。您可以围绕三角形的质心旋转每个点,然后绘制由这些点定义的多边形。要做到这一点,最简单的方法是从一般旋转矩阵中导出一个公式。因为这是Stack Overflow,所以我不能很容易地向您展示没有LaTex支持的公式的推导。最后,点(x, y)可围绕三角形(xc, yc)的中心旋转THETA度。使用公式rX = ((x - xc) * cos(THETA)) - ((y - yc) * sin(THETA) + xc获取旋转点的x坐标,rY = ((x - xc) * sin(THETA)) + ((y - yc) * cos(THETA)) + yc。我相信你可以适应java,但如果你需要帮助,请告诉我。请记住,Math.cos()Math.sin()以弧度为单位,而不是度数。您还需要对其进行舍入,因为Math.toRadians()不会返回精确值,因此提供给Math.cos()Math.sin()的大多数值都会计算为0.