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);
}
}
}
}