所以我得到的这是一个三角形,但我该如何着色呢?我是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);
提前致谢!!!
答案 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.