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

