Ex12_1



/*-------------------------
 Ex12_1.java
 アプレット:カラーチェック
 --------------------------*/
package jp_bunkyo;

import java.applet.*;
import java.awt.*;

public class Ex12_1 extends Applet {
	Font ft;
	final int a = 15, b = 26;	// 六角形の辺の基準長(一辺30のとき,a=15, b=26=15*sqrt(3))

	public void paint(Graphics g) {
		int col[] = {0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF};	// 色基準値
		int i, j, k, red, grn, blu;
		String msg;

		int cx, cy;		// 六角形の中心位置
		int px[] = {-a,a,2*a,a,-a,-2*a}, py[] = {b,b,0,-b,-b,0}, pt = 6;	// 中心を基準にした六角形の座標
		int tx[] = {0,0,0,0,0,0}, ty[] = {0,0,0,0,0,0};
		ft = new Font("Rockwell", Font.PLAIN, 11);
		g.setFont(ft);

	// 中央白から
		for (i = 0; i < col.length; i++) {	// 左下
			for (j = 0; j < i+1; j++) {
				cx = 3*a * (col.length - j);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length + i) - b*j;	// 六角形の中心 y座標:基準+補正
				red = col[col.length-1];
				grn = col[col.length-1-j];
				blu = col[col.length-1-i];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
				g.setColor(Color.gray);
				msg =  (String.valueOf(Integer.toHexString(red))+String.valueOf(Integer.toHexString(grn))+String.valueOf(Integer.toHexString(blu))).toUpperCase();
				g.drawString(msg,cx-20,cy+5);
			}
		}

		for (i = 0; i < col.length; i++) {	// 右下
			for (j = 0; j < i+1; j++) {
				cx = 3*a * (col.length + j);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length + i) - b*j;	// 六角形の中心 y座標:基準+補正
				red = col[col.length-1-j];
				grn = col[col.length-1];
				blu = col[col.length-1-i];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
				g.setColor(Color.gray);
				msg =  (String.valueOf(Integer.toHexString(red))+String.valueOf(Integer.toHexString(grn))+String.valueOf(Integer.toHexString(blu))).toUpperCase();
				g.drawString(msg,cx-20,cy+5);
			}
		}

		for (i = 0; i < col.length; i++) {	// 右
			for (j = 0; j < i+1; j++) {
				cx = 3*a * (col.length + i);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length + j) - b*i;	// 六角形の中心 y座標:基準+補正
				red = col[col.length-1-i];
				grn = col[col.length-1];
				blu = col[col.length-1-j];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
				g.setColor(Color.gray);
				msg =  (String.valueOf(Integer.toHexString(red))+String.valueOf(Integer.toHexString(grn))+String.valueOf(Integer.toHexString(blu))).toUpperCase();
				g.drawString(msg,cx-20,cy+5);
			}
		}

		for (i = 0; i < col.length; i++) {	// 右上
			for (j = 0; j < i+1; j++) {
				cx = 3*a * (col.length + j);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length - i) + b*j;	// 六角形の中心 y座標:基準+補正
				red = col[col.length-1-i];
				grn = col[col.length-1-i+j];
				blu = col[col.length-1];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
				g.setColor(Color.gray);
				msg =  (String.valueOf(Integer.toHexString(red))+String.valueOf(Integer.toHexString(grn))+String.valueOf(Integer.toHexString(blu))).toUpperCase();
				g.drawString(msg,cx-20,cy+5);
			}
		}

		for (i = 0; i < col.length; i++) {	// 左上
			for (j = 0; j < i+1; j++) {
				cx = 3*a * (col.length - j);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length - i) + b*j;	// 六角形の中心 y座標:基準+補正
				red = col[col.length-1-i+j];
				grn = col[col.length-1-i];
				blu = col[col.length-1];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
				g.setColor(Color.gray);
				msg =  (String.valueOf(Integer.toHexString(red))+String.valueOf(Integer.toHexString(grn))+String.valueOf(Integer.toHexString(blu))).toUpperCase();
				g.drawString(msg,cx-20,cy+5);
			}
		}

		for (i = 0; i < col.length; i++) {	// 左
			for (j = 0; j < i+1; j++) {
				cx = 3*a * (col.length - i);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length + j) - b*i;	// 六角形の中心 y座標:基準+補正
				red = col[col.length-1];
				grn = col[col.length-1-i];
				blu = col[col.length-1-j];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
				g.setColor(Color.gray);
				msg =  (String.valueOf(Integer.toHexString(red))+String.valueOf(Integer.toHexString(grn))+String.valueOf(Integer.toHexString(blu))).toUpperCase();
				g.drawString(msg,cx-20,cy+5);
			}
		}

	// 中央黒から
		for (i = 0; i < col.length; i++) {	// 左下
			for (j = 0; j < i+1; j++) {
				cx = 6*a*col.length + 3*a * (col.length - j);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length + i) - b*j;	// 六角形の中心 y座標:基準+補正
				red = col[i];
				grn = col[i-j];
				blu = col[0];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
			}
		}

		for (i = 0; i < col.length; i++) {	// 右下
			for (j = 0; j < i+1; j++) {
				cx = 6*a*col.length + 3*a * (col.length + j);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length + i) - b*j;	// 六角形の中心 y座標:基準+補正
				red = col[i-j];
				grn = col[i];
				blu = col[0];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
			}
		}

		for (i = 0; i < col.length; i++) {	// 右
			for (j = 0; j < i+1; j++) {
				cx = 6*a*col.length + 3*a * (col.length + i);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length + j) - b*i;	// 六角形の中心 y座標:基準+補正
				red = col[0];
				grn = col[i];
				blu = col[i-j];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
			}
		}

		for (i = 0; i < col.length; i++) {	// 右上
			for (j = 0; j < i+1; j++) {
				cx = 6*a*col.length + 3*a * (col.length + j);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length - i) + b*j;	// 六角形の中心 y座標:基準+補正
				red = col[0];
				grn = col[j];
				blu = col[i];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
			}
		}

		for (i = 0; i < col.length; i++) {	// 左上
			for (j = 0; j < i+1; j++) {
				cx = 6*a*col.length + 3*a * (col.length - j);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length - i) + b*j;	// 六角形の中心 y座標:基準+補正
				red = col[j];
				grn = col[0];
				blu = col[i];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
			}
		}

		for (i = 0; i < col.length; i++) {	// 左
			for (j = 0; j < i+1; j++) {
				cx = 6*a*col.length + 3*a * (col.length - i);		// 六角形の中心 x座標:基準+補正
				cy = 2*b * (col.length + j) - b*i;	// 六角形の中心 y座標:基準+補正
				red = col[i];
				grn = col[0];
				blu = col[i-j];
				for (k = 0; k < 6; k++) {
					tx[k] = cx + px[k];		// 六角形の周りの6点 x座標
					ty[k] = cy + py[k];		// 六角形の周りの6点 y座標
				}
				g.setColor(new Color(red, grn, blu));
				g.fillPolygon(tx,ty,pt);
			}
		}

	}
}