|
Polygones are multiple shapes and can be produced using the methods drawPolygon
and fillPolygone. The arguments for either can be a two integer arrays of coordinates,
xCoords[] and yCoords[], or an instance of the class Polygon.
To create a
int xCoords[] = {20, 40, 50, 30};
int yCoords[] = {50, 50, 60, 80};
Polygon myPolygon = new Polygone(xCoords,yCoords);
drawPolygon(myPolygone);
Alternatively we could have wriitem:
int xCoords[] = {20, 40, 50, 30};
int yCoords[] = {50, 50, 60, 80};
drawPolygon(xCoords,yCoords);
to produce the same effect.
In this example we draw 10000 (100*100) 3-D cuboids, each of a random height, placed on a 100 by 100 grid. Each cuboid ismade up of three polgones, one for each "face".
// JAVA POLYGONES
// Frans Coenen
// Tuesday 22 May 2003
// The University of Liverpool, UK
/* Based on example given by Deitel and Deital */
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
// Java extension packages
import javax.swing.*;
public class Polygones extends JFrame {
// ------------------- FIELDS ------------------------
/* CONSTANTS */
static final int INDENT = 3;
static final int MAX = 100;
static final int Y_BORDER = 10;
static final int X_BORDER = 30;
static final int WIDTH = (X_BORDER*2)+(INDENT*MAX*2);
static final int HEIGHT = 30+(Y_BORDER*2)+(INDENT*MAX*3);
// ------------------ CONSTRUCTORS -------------------
public Polygones() {
super("Java Polygones");
getContentPane().setBackground(Color.white);
setSize(WIDTH,HEIGHT);
setVisible(true);
}
// ------------------ METHODS ------------------------
/* PAINT */
/** Draws general paths. */
public void paint(Graphics g) {
// Call superclass paint method
super.paint(g);
int height, x2, y2;
int x1 = (99*INDENT)+X_BORDER;
int y1 = (102*INDENT)+Y_BORDER+30;
for(int xIndex=MAX;xIndex>0;xIndex--) {
x2 = x1;
y2 = y1;
for(int yIndex=MAX;yIndex>0;yIndex--) {
height = (int) (Math.random()*100);
drawTower(g,x2,y2,height*INDENT);
x2 = x2-INDENT;
y2 = y2+INDENT;
}
x1 = x1+INDENT;
y1 = y1+INDENT;
}
}
public void drawTower(Graphics g, int x, int y, int h) {
drawPolygoneLeft(g,x,y,h);
drawPolygoneRight(g,x,y,h);
drawDiamond(g,x,y,h);
}
public void drawPolygoneLeft(Graphics g, int x, int y, int h) {
g.setColor(new Color(102,102,102));
int xValues[] = {x,x,x+INDENT,x+INDENT};
int yValues[] = {y-INDENT,y-INDENT-h,y-h,y};
Polygon polygon1 = new Polygon(xValues,yValues,4);
g.fillPolygon(polygon1);
}
public void drawPolygoneRight(Graphics g, int x, int y, int h) {
g.setColor(new Color(153,153,153));
int xValues[] = {x+INDENT,x+INDENT,x+INDENT+INDENT,x+INDENT+INDENT};
int yValues[] = {y,y-h,y-h-INDENT,y-INDENT};
Polygon polygon1 = new Polygon(xValues,yValues,4);
g.fillPolygon(polygon1);
}
public void drawDiamond(Graphics g, int x, int y, int h) {
g.setColor(new Color(204,204,204));
int xValues[] = {x,x+INDENT,x+INDENT+INDENT,x+INDENT};
int yValues[] = {y-h-INDENT,y-h-INDENT-INDENT,y-h-INDENT,y-h};
Polygon polygon1 = new Polygon(xValues,yValues,4);
g.fillPolygon(polygon1);
}
/* MAIN METHOD */
public static void main(String args[]) {
Polygones application = new Polygones();
application.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
}
|
Table 1: Polygone example code
Figure 1 :Output from code presented in Table 1