【问题标题】:Java - How can I fill a Triangle and rotate it? (Polygon)Java - 如何填充三角形并旋转它? (多边形)
【发布时间】:2016-11-08 22:40:37
【问题描述】:

所以我得到了这是一个三角形,但我该如何着色呢?我是 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);

提前致谢!!!

【问题讨论】:

  • fillPolygon 将用您的颜色填充形状。
  • 那么我需要编码什么?对不起,我是个菜鸟:(
  • g.drawPolygon 绘制轮廓。 g.fillPolygon 该行中的颜色。如果您阅读documentation,您可以看到该方法。

标签: java polygon paintcomponent graphics2d


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多