You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何使用for循环绘制组成正方形的8个随机颜色三角形

Java 绘制8个随机色三角形的循环简化实现

实现思路

所有三角形都以画布中心点 (w/2, h/2) 为公共顶点,8个三角形刚好对应画布四个象限的2组拆分:

  • 第一组(1~4号):四个象限沿外边缘的直角三角形
  • 第二组(5~8号):四个象限沿对角线的直角三角形
    用双循环实现的话,只要预先定义好两组三角形的x、y坐标模板,循环遍历四个方向即可,不需要逐个定义坐标数组。

简化后代码

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Lekcja11 extends JPanel {

    public Dimension getPreferredSize() {
        return new Dimension(500, 500);
    }

    protected void paintComponent(Graphics k) {
        super.paintComponent(k);            

        int w = getWidth();
        int h = getHeight();
        int cx = w / 2;
        int cy = h / 2;

        // 第一组:1~4号三角形坐标模板,顺序对应上左、上右、下右、下左
        int[][] group1X = {{cx, 0, 0}, {cx, cx, w}, {cx, w, w}, {cx, cx, 0}};
        int[][] group1Y = {{cy, cy, 0}, {cy, 0, 0}, {cy, cy, h}, {cy, h, h}};

        // 第二组:5~8号三角形坐标模板,顺序对应上左、上右、下右、下左
        int[][] group2X = {{cx, 0, cx}, {cx, w, w}, {cx, w, cx}, {cx, 0, 0}};
        int[][] group2Y = {{cy, 0, 0}, {cy, 0, cy}, {cy, h, h}, {cy, h, cy}};

        // 双循环绘制,第一个循环画第一组,第二个循环画第二组
        for (int i = 0; i < 4; i++) {
            // 每个三角形生成独立随机色,不需要的话可以把这段移到循环外
            int r = (int)(Math.random()*255);
            int g = (int)(Math.random()*255);
            int b = (int)(Math.random()*255);
            k.setColor(new Color(r, g, b));
            k.fillPolygon(group1X[i], group1Y[i], 3);
        }

        for (int i = 0; i < 4; i++) {
            int r = (int)(Math.random()*255);
            int g = (int)(Math.random()*255);
            int b = (int)(Math.random()*255);
            k.setColor(new Color(r, g, b));
            k.fillPolygon(group2X[i], group2Y[i], 3);
        }
    }

    public static void main(String[] args) {
        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Lekcja11 triangles = new Lekcja11();
        window.add(triangles);
        window.setVisible(true);
        window.pack();      
    }
}

补充说明

  • 原代码中每个三角形的坐标数组写了4个点(多了一个重复的中心点),实际三角形只需要3个顶点即可,简化后的代码去掉了冗余的重复点,绘制效果完全一致。
  • 如果要按你说的单循环实现,只要把两组数组合并成一个长度为8的数组,按1、5、2、6、3、7、4、8的顺序存储坐标模板,循环8次即可。
  • 如果需要所有三角形用同一个颜色,把随机色生成逻辑移回类成员变量位置即可。

内容的提问来源于stack exchange,提问作者blabsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:42:03