import java.applet.Applet; import java.awt.*; /** Program: MaclaurinSeriesExpansion Purpose: sin(x) ‚Ì Maclaurin “WŠJ‚ð•`‚­ @author segi.tetsu@ss.bch.ntt.jp @version 1.00; 2 March 1996 */ public class MaclaurinSeriesExpansion extends Applet { final float origin_x = 200; final float origin_y = 110; final float step_x = 20.0f; final float step_y = 20.0f; int n = 0; int step1, step2, step3, step4, step5, step6; float value[] = new float[61]; Image image; public void init() { image = getImage(getDocumentBase(), "images/Sum.gif"); step1 = Math.round(-3.0f * (float)Math.PI * step_x + origin_x); step2 = Math.round(-2.0f * (float)Math.PI * step_x + origin_x); step3 = Math.round(-1.0f * (float)Math.PI * step_x + origin_x); step4 = Math.round( 1.0f * (float)Math.PI * step_x + origin_x); step5 = Math.round( 2.0f * (float)Math.PI * step_x + origin_x); step6 = Math.round( 3.0f * (float)Math.PI * step_x + origin_x); } public void start() { for (int i = 0; i < 61; i++) value[i] = (float)Math.PI * (float)(i - 30) / 10.0f; } public void stop() { n = 0; } public void paint(Graphics g) { g.drawLine(0, 110, 400, 110); g.drawLine(200, 10, 200, 210); g.drawLine(400, 110, 395, 107); g.drawLine(400, 110, 395, 113); g.drawLine(200, 10, 197, 15); g.drawLine(200, 10, 203, 15); g.setFont(new Font("TimesRoman", Font.PLAIN, 15)); g.drawString("x", 395, 125); g.drawString("f(x)", 205, 20); g.drawLine(step1, 107, step1, 113); g.drawLine(step2, 107, step2, 113); g.drawLine(step3, 107, step3, 113); g.drawLine(step4, 107, step4, 113); g.drawLine(step5, 107, step5, 113); g.drawLine(step6, 107, step6, 113); g.setFont(new Font("TimesRoman", Font.PLAIN, 10)); g.drawString("-3PI", step1+2, 108); g.drawString("-2PI", step2+2, 118); g.drawString("-PI" , step3+2, 108); g.drawString("O" , 202 , 118); g.drawString("PI" , step4+2, 108); g.drawString("2PI" , step5+2, 118); g.drawString("3PI" , step6+2, 108); g.drawLine(197, 30, 203, 30); g.drawLine(197, 50, 203, 50); g.drawLine(197, 70, 203, 70); g.drawLine(197, 90, 203, 90); g.drawLine(197, 130, 203, 130); g.drawLine(197, 150, 203, 150); g.drawLine(197, 170, 203, 170); g.drawLine(197, 190, 203, 190); g.drawString("4", 205, 33); g.drawString("3", 205, 53); g.drawString("2", 205, 73); g.drawString("1", 205, 93); g.drawString("-1", 205, 133); g.drawString("-2", 205, 153); g.drawString("-3", 205, 173); g.drawString("-4", 205, 193); g.drawImage(image, 420, 50, this); g.setFont(new Font("TimesRoman", Font.ITALIC, 30)); g.drawString("n="+n, 440, 150); for (int i = 0; i < 60; i++) { int x1 = Math.round((float)(i - 30) / 10.0f * (float)Math.PI * step_x + origin_x); int x2 = Math.round((float)(i - 29) / 10.0f * (float)Math.PI * step_x + origin_x); int y1 = Math.round(-value[i] * step_y + origin_y); int y2 = Math.round(-value[i + 1] * step_y + origin_y); g.drawLine(x1, y1, x2, y2); } } public boolean mouseDown(Event e, int x, int y) { if (n >= 19) return true; n++; int index = 2*n + 1; int sign; float denominator = 1.0f; for (int i = 1; i <= index; i++) denominator *= (float)i; if ((n % 2) == 0) sign = 1; else sign = -1; for (int i = 0; i < 61; i++) { float xx = (float)(i - 30) / 10.0f * (float)Math.PI; value[i] += (float)sign * (float)Math.pow(xx, index) / denominator; } repaint(); return true; } }