//------------------------------------------------------------------ // biorhythm - BioRhythm. // Copyright 1997, All rights reserved // Version: 1.1 // Authors: Tsuyoshi Furumizo // Created: 1/28/97 // Modified: 5/19/98 //------------------------------------------------------------------- import java.applet.Applet; import java.awt.*; import java.util.Date; import java.lang.Math; public class biorhythm extends Applet { InputControls controls; public void init() { setLayout(new BorderLayout()); BioCanvas c = new BioCanvas(); add("Center", c); add("South", controls = new InputControls(c)); } public void start() { controls.enable(); } public void stop() { controls.disable(); } public boolean handleEvent(Event e) { if (e.id == Event.WINDOW_DESTROY) { System.exit(0); } return false; } public static void main(String args[]) { Frame f = new Frame("biorhythm"); biorhythm bioRhythm = new biorhythm(); bioRhythm.init(); bioRhythm.start(); f.add("Center", bioRhythm); f.resize(300, 300); f.show(); } } // end class biorhythm class BioCanvas extends Canvas { int year = 0, mon = 0, day = 0; public void paint(Graphics g) { Rectangle r = bounds(); int h = r.height; int w = r.width; int i, dday; Date date = new Date(); g.setColor(Color.black); g.drawLine(0, h/2, w, h/2); g.drawLine(10, 0, 10, h); g.setFont(new Font("TimesRoman", Font.PLAIN, 10)); for(i = 1; i <= (w - 10) / 20; i++) { Date dt = new Date(date.getYear(), date.getMonth(), date.getDate() + i - 1); g.drawLine(10 + i * 20, h / 2 - 5, 10 + i * 20, h / 2 + 5); g.drawString(Integer.toString(dt.getMonth() + 1), 10 + i * 20 - 4, h / 2 + 20); g.drawString("/", 10 + i * 20 - 4, h / 2 + 30); g.drawString(Integer.toString(dt.getDate()), 10 + i * 20 - 4, h / 2 + 40); } if(mon == 0 || day == 0) { return; } dday = dDay(date.getYear() + 1900, date.getMonth() + 1, date.getDate()) - dDay(year, mon, day); int x[] = new int[(w - 10) / 2]; int y[] = new int[(w - 10) / 2]; // 身体 g.setColor(Color.black); for(i = 0; i < (w - 10) / 2; i++) { x[i] = i * 2 + 10; y[i] = (int)(Math.sin(2 * Math.PI * ((float)(i-10 + dday * 10) / 10.0) / -23.0) * h / 3.0 + h / 2.0); if(y[i] >= h / 2 - 1 && y[i] <= h / 2 + 1) { g.drawOval(x[i] - 4, y[i] - 4, 8, 8); } } g.setColor(Color.blue); // g.drawPolygon(x, y, (w - 10) / 2); for(i = 0; i < (w - 10) / 2 - 1; i++) g.drawLine(x[i], y[i], x[i+1], y[i+1]); // 知性 g.setColor(Color.black); for(i = 0; i < (w - 10) / 2; i++) { x[i] = i * 2 + 10; y[i] = (int)(Math.sin(2 * Math.PI * ((float)(i-10 + dday * 10) / 10.0) / -33.0) * h / 3.0 + h / 2.0); if(y[i] >= h / 2 - 1 && y[i] <= h / 2 + 1) { g.drawOval(x[i] - 4, y[i] - 4, 8, 8); } } g.setColor(Color.red); // g.drawPolygon(x, y, (w - 10) / 2); for(i = 0; i < (w - 10) / 2 - 1; i++) g.drawLine(x[i], y[i], x[i+1], y[i+1]); // 感情 g.setColor(Color.black); for(i = 0; i < (w - 10) / 2; i++) { x[i] = i * 2 + 10; y[i] = (int)(Math.sin(2 * Math.PI * ((float)(i-10 + dday * 10) / 10.0) / -28.0) * h / 3.0 + h / 2.0); if(y[i] >= h / 2 - 1 && y[i] <= h / 2 + 1) { g.drawOval(x[i] - 4, y[i] - 4, 8, 8); } } g.setColor(new Color(0,0x80,0)); // g.drawPolygon(x, y, (w - 10) / 2); for(i = 0; i < (w - 10) / 2 - 1; i++) g.drawLine(x[i], y[i], x[i+1], y[i+1]); } public void redraw(int y, int m, int d) { this.year = y; this.mon = m; this.day = d; repaint(); } int dDay(int y, int m, int d) { int i, md[] = new int[12]; int dday; md[0] = 31; md[1] = 28; md[2] = 31; md[3] = 30; md[4] = 31; md[5] = 30; md[6] = 31; md[7] = 31; md[8] = 30; md[9] = 31; md[10] = 30; md[11] = 31; dday = (y - 1) * 365; dday = dday + ((y - 1) / 4) - ((y - 1) / 100) + ((y - 1) / 400); for(i = 0; i < m - 1; i++) { dday += md[i]; if((i == 1) && (y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0))) dday++; } dday += d; return dday; } } // end class BioCanvas class InputControls extends Panel { TextField sy, sm, sd; BioCanvas canvas; public InputControls(BioCanvas canvas) { this.canvas = canvas; add(new Label("Year")); add(sy = new TextField("", 4)); add(new Label("Month")); add(sm = new TextField("", 2)); add(new Label("Day")); add(sd = new TextField("", 2)); add(new Label(" ")); add(new Button("Start")); } public boolean action(Event ev, Object arg) { if (ev.target instanceof Button) { canvas.redraw(Integer.parseInt(sy.getText().trim()), Integer.parseInt(sm.getText().trim()), Integer.parseInt(sd.getText().trim())); return true; } return false; } } // end class InputControls