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
相关产品推荐
相关产品推荐

