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

Java中如何随机化多边形顶点坐标及颜色?求生成500个随机三角形代码

没问题,我帮你完成这个需求!下面是完整的实现代码和详细解释,完全符合你要的随机化顶点坐标、颜色,以及生成500个不同三角形的要求:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Canvas;
import javax.swing.JFrame;
import java.awt.Polygon;
import java.util.Random;

public final class CRassignment34 extends Canvas {
    // 定义画布宽高,确保随机坐标在可见范围内
    private static final int CANVAS_WIDTH = 800;
    private static final int CANVAS_HEIGHT = 600;
    // 只初始化一次Random实例,提升效率
    private final Random random = new Random();

    public static void main(String[] args) {
        JFrame frame = new JFrame("500 Random Triangles");
        CRassignment34 canvas = new CRassignment34();
        
        canvas.setSize(CANVAS_WIDTH, CANVAS_HEIGHT);
        frame.add(canvas);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null); // 让窗口在屏幕居中
        frame.setVisible(true);
    }

    @Override
    public void paint(Graphics g) {
        // 循环生成500个独立的随机三角形
        for (int i = 0; i < 500; i++) {
            // 1. 随机生成三个顶点的坐标(范围在画布宽高内)
            int x1 = random.nextInt(CANVAS_WIDTH);
            int y1 = random.nextInt(CANVAS_HEIGHT);
            int x2 = random.nextInt(CANVAS_WIDTH);
            int y2 = random.nextInt(CANVAS_HEIGHT);
            int x3 = random.nextInt(CANVAS_WIDTH);
            int y3 = random.nextInt(CANVAS_HEIGHT);

            // 创建三角形多边形对象
            Polygon triangle = new Polygon();
            triangle.addPoint(x1, y1);
            triangle.addPoint(x2, y2);
            triangle.addPoint(x3, y3);

            // 2. 生成随机颜色(带可选透明度,让重叠三角形更有层次感)
            Color randomColor = new Color(
                random.nextInt(256), // 红色通道:0-255
                random.nextInt(256), // 绿色通道:0-255
                random.nextInt(256), // 蓝色通道:0-255
                random.nextInt(128)  // 透明度:0-128(0完全透明,255完全不透明)
            );

            // 设置颜色并绘制填充三角形
            g.setColor(randomColor);
            g.fillPolygon(triangle);
            // 可选:绘制黑色边框,让三角形轮廓更清晰(不需要可以注释此行)
            g.setColor(Color.BLACK);
            g.drawPolygon(triangle);
        }
    }

    // 重写此方法,让pack()能正确计算窗口大小
    @Override
    public java.awt.Dimension getPreferredSize() {
        return new java.awt.Dimension(CANVAS_WIDTH, CANVAS_HEIGHT);
    }
}

关键细节说明

  • 坐标随机化:用Random.nextInt()生成0到画布宽/高之间的整数,保证所有三角形都在窗口可见区域内
  • 颜色随机化:通过RGB三通道+可选透明度生成全范围的随机颜色,透明度设置让重叠的三角形不会完全遮挡底层图形,视觉效果更好
  • 高效性:Random实例只初始化一次,避免循环内重复创建对象
  • 窗口适配:重写getPreferredSize()确保窗口能正确适配画布大小,不会裁剪图形

如果需要调整画布大小、颜色范围或者去掉透明度,直接修改对应常量或参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:35:25