import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class Lumehelves extends Applet implements AdjustmentListener{ int lyhimaSirgePikkus = 90; Scrollbar sb = new Scrollbar(Scrollbar.VERTICAL, lyhimaSirgePikkus, 10, 2, 200); int kuusnurgaKyljePikkus = 100; int ttl, initTtl = 3000; public Lumehelves(){ setLayout(new BorderLayout()); add(sb, BorderLayout.WEST); sb.addAdjustmentListener(this); } public void adjustmentValueChanged(AdjustmentEvent e){ repaint(); } public void sirgjoon(Graphics g, Punkt a, Punkt b){ g.drawLine(a.x(), a.y(), b.x(), b.y()); } public void joon(Graphics g, Punkt a, Punkt b){ if (ttl > 0) { ttl--; } else return; double kaugus = a.kaugus(b); if (kaugus > lyhimaSirgePikkus) { Punkt joonevektor = b .minus (a); Punkt a_a1 = joonevektor.koopia(); a_a1.multiply(1.0/3); Punkt a_b1 = joonevektor.koopia(); a_b1.multiply(2.0/3); Punkt a_a1_rot = a_a1.koopia(); a_a1_rot.rotate(-60); Punkt a1 = a.plus(a_a1); Punkt b1 = a.plus(a_b1); Punkt tipp = a1.plus(a_a1_rot); joon(g, a, a1); joon(g, a1, tipp); joon(g, tipp, b1); joon(g, b1, b); } else sirgjoon(g, a, b); } public void paint(Graphics g){ //kuusnurga joonistamine ttl = initTtl; lyhimaSirgePikkus = sb.getValue(); Punkt a = new Punkt(150, 150); Punkt nihe = new Punkt(kuusnurgaKyljePikkus, 0); Punkt b = a .plus (nihe); nihe.rotate(60); Punkt c = b .plus (nihe); nihe.rotate(60); Punkt d = c .plus (nihe); nihe.rotate(60); Punkt e = d .plus (nihe); nihe.rotate(60); Punkt f = e .plus (nihe); joon(g, a, b); joon(g, b, c); joon(g, c, d); joon(g, d, e); joon(g, e, f); joon(g, f, a); } public static void main(String argumendid[]){ Frame f = new Frame("Lumehelves"); f.add(new Lumehelves()); f.setSize(400, 400); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.out.println("Programmi ots"); System.exit(0); } }); } } class Punkt { double x, y; public Punkt(){ this(0, 0); } public Punkt(double x, double y){ this.x = x; this.y = y; } public Punkt koopia(){ return new Punkt(x, y); } public Punkt plus(Punkt p){ return new Punkt(x + p.x, y + p.y); } public Punkt minus(Punkt p){ return new Punkt(x - p.x, y - p.y); } public double kaugus(Punkt c){ //punkti kaugus teisest. Punkt d = minus(c); return Math.sqrt(d.x * d.x + d.y * d.y); } public double pikkus(){ //(punkti=)vektori pikkus. return Math.sqrt(x * x + y * y); } public void add(Punkt p){ x += p.x; y += p.y; } public void sub(Punkt p){ x -= p.x; y -= p.y; } public void multiply(double arv){ x *= arv; y *= arv; } public void disperse(double piir){ x = x - piir + Math.random() * 2*piir; y = y - piir + Math.random() * 2*piir; } public double nurk(){ double c = pikkus(); double cosAlfa = (double)x/c; double ac = Math.acos(cosAlfa); if (y<0) return -ac; else return ac; } public void rotate(double nurkKraadides){ double nurkRadiaanides = Math.toRadians(nurkKraadides); double c = pikkus(); double uusNurk = nurk() + nurkRadiaanides; y = c * Math.sin(uusNurk); x = c * Math.cos(uusNurk); } public int x(){ return (int)x; } public int y(){ return (int)y; } }