/** Program: Pascal3 Purpose: Reccurence figure @author: Sanae.Masasi @version: 1.00; 1.June.96 */ import java.awt.*; import java.applet.*; public class Pascal3 extends Applet{ Control3 controls; public void init(){ setLayout(new BorderLayout()); Canvas3 c = new Canvas3(); add("Center",c); add("South",controls = new Control3(c)); c.setBackground(Color.white); } 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; } } class Canvas3 extends Canvas{ int a = 1,b = 0,c = 1,q = 2; int xx,yy,cx; int ff[] = new int[600]; int gg[] = new int[600]; Rectangle rect; public void paint(Graphics g) { } public void update(Graphics g) { int xs,ys; rect = bounds(); yy = (int)(rect.height / Math.sqrt(3d)); cx = (int)(rect.width / 2); xx = 2 * cx; g.setColor(Color.white); g.fillRect(0,0,rect.width,rect.height); for(int x = 0;x < xx;x++){ if(x == cx){ ff[x] = 1; g.setColor(Color.red); g.drawLine(x,0,x,0); }else{ ff[x] = 0; } } for(int y = 1;y < yy;y++){ for(int x = 0;x < xx;x++){ if(x == 0){ gg[x] = b * ff[x] + c * ff[x+1]; }else if(x == xx - 1){ gg[x] = a * ff[x - 1] + b * ff[x]; }else{ gg[x] = a * ff[x - 1] + b * ff[x] + c * ff[x + 1]; } gg[x] = gg[x] % q; if(gg[x] != 0){ g.setColor(Color.red); xs = x; ys = (int)(y * Math.sqrt(3d)); g.drawLine(xs,ys,xs,ys); } } for(int x = 0;x < xx;x++) ff[x] = gg[x]; } } public void redraw(int a,int b,int c,int q){ this.a = a; this.b = b; this.c = c; this.q = q; repaint(); } } class Control3 extends Panel{ Canvas3 canvas; Font font = new Font("TimesRoman",Font.ITALIC,12); Choice FigA,FigB,FigC,FigQ; Label labelA,labelB,labelC,labelQ; public Control3(Canvas3 canvas){ this.canvas = canvas; setLayout(new FlowLayout()); labelA = new Label("fig a,b,c ",Label.LEFT); labelA.setFont(font); add(labelA); FigA = new Choice(); for(int i = -5;i <=5;i++){ FigA.addItem("" + i); } FigA.select(String.valueOf(canvas.a)); add(FigA); FigB = new Choice(); for(int i = -5;i <=5;i++){ FigB.addItem("" + i); } FigB.select(String.valueOf(canvas.b)); add(FigB); FigC = new Choice(); for(int i = -5;i <=5;i++){ FigC.addItem("" + i); } FigC.select(String.valueOf(canvas.c)); add(FigC); labelQ = new Label("rest ",Label.LEFT); labelQ.setFont(font); add(labelQ); FigQ = new Choice(); for(int i = 2;i <=15;i++){ FigQ.addItem("" + i); } FigQ.select(String.valueOf(canvas.q)); add(FigQ); add(new Button("DRAW")); } public boolean action(Event ev, Object arg) { if (ev.target instanceof Button) { canvas.redraw(Integer.parseInt(FigA.getSelectedItem()), Integer.parseInt(FigB.getSelectedItem()), Integer.parseInt(FigC.getSelectedItem()), Integer.parseInt(FigQ.getSelectedItem())); } return false; } }