1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| public class MSponge extends JFrame { public MSponge(){ setTitle("门格海绵"); setSize(1000,1000); setResizable(true); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); }
@Override public void paint(Graphics g){ super.paint(g); DrawSponge(500,500,200,200,50,50,g); }
public void Draw3DRect(int x,int y,int w,int h,int dx,int dy,Graphics g){ Point point1= new Point(x,y); Point point2= new Point(x+w,y); Point point3= new Point(x+w,y+h); Point point4= new Point(x,y+h); Point point5= new Point(x+dx,y-dy); Point point6= new Point(point2.x+dx, point2.y-dy); Point point7= new Point(point6.x, point6.y+h);
Polygon pl1 = new Polygon(); pl1.addPoint(point1.x, point1.y); pl1.addPoint(point2.x, point2.y); pl1.addPoint(point3.x, point3.y); pl1.addPoint(point4.x, point4.y); Color color1 = new Color(217,218,11); g.setColor(color1); g.fillPolygon(pl1); g.setColor(Color.gray); g.drawPolygon(pl1);
Polygon pl2 = new Polygon(); pl2.addPoint(point1.x, point1.y); pl2.addPoint(point5.x, point5.y); pl2.addPoint(point6.x, point6.y); pl2.addPoint(point2.x, point2.y); Color color2 = new Color(14,150,4); g.setColor(color2); g.fillPolygon(pl2); g.setColor(Color.gray); g.drawPolygon(pl2);
Polygon pl3 = new Polygon(); pl3.addPoint(point2.x, point2.y); pl3.addPoint(point6.x, point6.y); pl3.addPoint(point7.x, point7.y); pl3.addPoint(point3.x, point3.y); Color color3 = new Color(18,49,74); g.setColor(color3); g.fillPolygon(pl3); g.setColor(Color.gray); g.drawPolygon(pl3); } public void DrawSponge(int x,int y,int w,int h,int dx,int dy,Graphics g){ if(w<10) return; Draw3DRect(x,y,w,h,dx,dy,g); DrawSponge(x+2*dx/3,y-2*dy/3+2*h/3,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x+w,y,w,h,dx,dy,g); DrawSponge(x+w+2*dx/3,y-2*dy/3+2*h/3,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x+2*w,y,w,h,dx,dy,g); DrawSponge(x+2*w+2*dx/3,y-2*dy/3+2*h/3,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-dx,y+dy,w,h,dx,dy,g); DrawSponge(x+2*dx/3-dx,y-2*dy/3+2*h/3+dy,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-dx+2*w,y+dy,w,h,dx,dy,g); DrawSponge(x+2*w+2*dx/3-dx,y-2*dy/3+2*h/3+dy,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-2*dx,y+2*dy,w,h,dx,dy,g); DrawSponge(x+2*dx/3-2*dx,y-2*dy/3+2*h/3+2*dy,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-2*dx+w,y+2*dy,w,h,dx,dy,g); DrawSponge(x+2*dx/3-2*dx+w,y-2*dy/3+2*h/3+2*dy,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-2*dx+2*w,y+2*dy,w,h,dx,dy,g); DrawSponge(x+2*dx/3-2*dx+2*w,y-2*dy/3+2*h/3+2*dy,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x,y-h,w,h,dx,dy,g); DrawSponge(x+2*dx/3,y-2*dy/3+2*h/3-h,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x+2*w,y-h,w,h,dx,dy,g); DrawSponge(x+2*w+2*dx/3,y-2*dy/3+2*h/3-h,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-2*dx,y+2*dy-h,w,h,dx,dy,g); DrawSponge(x+2*dx/3-2*dx,y-2*dy/3+2*h/3+2*dy-h,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-2*dx+2*w,y+2*dy-h,w,h,dx,dy,g); DrawSponge(x+2*dx/3-2*dx+2*w,y-2*dy/3+2*h/3+2*dy-h,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x,y-2*h,w,h,dx,dy,g); DrawSponge(x+2*dx/3,y-2*dy/3+2*h/3-2*h,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x+w,y-2*h,w,h,dx,dy,g); DrawSponge(x+w+2*dx/3,y-2*dy/3+2*h/3-2*h,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x+2*w,y-2*h,w,h,dx,dy,g); DrawSponge(x+2*w+2*dx/3,y-2*dy/3+2*h/3-2*h,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-dx,y+dy-2*h,w,h,dx,dy,g); DrawSponge(x+2*dx/3-dy,y-2*dy/3+2*h/3-2*h+dy,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-dx+2*w,y+dy-2*h,w,h,dx,dy,g); DrawSponge(x+2*w+2*dx/3-dx,y-2*dy/3+2*h/3-2*h+dy,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-2*dx,y+2*dy-2*h,w,h,dx,dy,g); DrawSponge(x+2*dx/3-2*dx,y-2*dy/3+2*h/3+2*dy-2*h,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-2*dx+w,y+2*dy-2*h,w,h,dx,dy,g); DrawSponge(x+2*dx/3-2*dx+w,y-2*dy/3+2*h/3+2*dy-2*h,w/3,h/3,dx/3,dy/3,g);
Draw3DRect(x-2*dx+2*w,y+2*dy-2*h,w,h,dx,dy,g); DrawSponge(x+2*dx/3-2*dx+2*w,y-2*dy/3+2*h/3+2*dy-2*h,w/3,h/3,dx/3,dy/3,g);
}
public static void main(String[] args) { new MSponge(); } }
|