Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何填充三角形并旋转它?(多边形)_Java_Polygon_Paintcomponent_Graphics2d - Fatal编程技术网

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

Java-如何填充三角形并旋转它?(多边形),java,polygon,paintcomponent,graphics2d,Java,Polygon,Paintcomponent,Graphics2d,我得到了一个三角形,但是我该如何给它上色呢?我是新来爪哇的,所以请容忍我。我还想稍后复制它并粘贴到它旁边,然后在它的头部旋转它。我试图构建的图是a(正如您所看到的,它主要构建在traingles的不同部分) 提前感谢 您可以将图形对象g强制转换为2D grphics对象。例如: Graphics2D g2 = (Graphics2D) g; 将允许您使用需要导入的Graphics2D包中包含的工具。然后,可以创建三角形: Polygon tri = new Polygon(new int[]

我得到了一个三角形,但是我该如何给它上色呢?我是新来爪哇的,所以请容忍我。我还想稍后复制它并粘贴到它旁边,然后在它的头部旋转它。我试图构建的图是a(正如您所看到的,它主要构建在traingles的不同部分)


提前感谢

您可以将图形对象g强制转换为2D grphics对象。例如:

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
度旋转。我指定rotate的两个额外参数的原因是,如果没有指定,它将围绕(0,0)旋转
140/3
只是x坐标的平均值,
220/3
是y坐标的平均值。如果你很了解你的几何,你会认出这是一个三角形的质心。如果每次旋转的角度相同,只需手动将θ转换为弧度即可。然而,还有另一种方法可以做到这一点。可以围绕三角形的质心旋转每个点,然后绘制由这些点定义的多边形。要做到这一点,最简单的方法是从通用旋转矩阵推导公式。因为这是堆栈溢出,所以在没有LaTex支持的情况下,我不能很容易地向您展示公式的推导过程。最后,点
(x,y)
可以围绕三角形
(xc,yc)
的中心旋转
θ
度。使用公式
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。

fillPolygon
将用您的颜色填充形状。那么我需要编码什么?对不起,我是一个彻头彻尾的傻瓜:(
g.drawPolygon
绘制轮廓。
g.fillPolygon
将在该行中添加颜色。如果您阅读了文章,您可以看到该方法。
g2.rotate(Math.toRadians(THETA), (140 / 3), (220 / 3));
g2.fill(tri);