////////////////////////////////////////
// 49104 øv.5 opg.2
//
// Grafik-pjat...
//

import java.applet.*;
import java.awt.*;

public class GrafikTest extends Applet
{
	public GrafikTest()
	{
	}

	public String getAppletInfo()
	{
		return "Name: GrafikTest\r\n" +
		       "Author: Mikael and Rune\r\n" +
		       "Created with Hard Work";
	}


	public void init()
	{
    	resize(320, 320);
	}


	public void destroy()
	{
	}

	// Deler billedet op i de 4 dele og giver deres koordinater til tegne-rutiner
	public void paint(Graphics g)
	{
		Rectangle r = g.getClipBounds();
		
		int xsz=r.width, ysz=r.height;

		tegnflag(g,0,0,xsz/2, ysz/2);
		tegnlykkehjul(g,xsz/2,0,xsz,ysz/2);
		tegnstjerne(g,0,ysz/2,xsz/2,ysz);
		tegnskakbraet(g,xsz/2,ysz/2,xsz,ysz);
	}

	// tegner et flag indenfor de givne koordinater
	public void tegnflag(Graphics g, int x1, int y1, int x2, int y2)
	{
		g.setColor(new Color(255,0,0) );
		g.fillRect(x1,y1,x2,y2);
		g.setColor(new Color(255,255,255) );
		g.fillRect(x1,y1+((y2-y1)*3)/7,x2-x1,(y2-y1)/7);
		g.fillRect(x1+(x2-x1)*3/7,y1,(x2-x1)/7,y2-y1);
	}

	// tegner et lykkehjul
	public void tegnlykkehjul(Graphics g, int x1, int y1, int x2, int y2)
	{
		for (int i=0; i<=15; i++)
		{
			switch (i%8)
			{
			case 0: g.setColor(new Color(255,0,0)); break;
			case 1: g.setColor(new Color(255,255,0)); break;
			case 2: g.setColor(new Color(0,0,255)); break;
			case 3: g.setColor(new Color(255,128,0)); break;
			case 4: g.setColor(new Color(0,0,0)); break;			
			case 5: g.setColor(new Color(0,255,0)); break;
			case 6: g.setColor(new Color(128,128,128)); break;
			case 7: g.setColor(new Color(0,128,128)); break;
			default:
			}
			
			g.fillArc(x1, y1, x2-x1, y2-y1, (i*360)/16, 360/16);
		}
	}
	
	// Tegner en stjerne
	// Omregner til polære koordinater udfra centrum på tegneområdet
	// Bestemmer det punkt på cirklen der ligger omtrent lige overfor på cirklen
	public void tegnstjerne(Graphics g, int x1, int y1, int x2, int y2)
	{
		// antal takker
		int takker = 7;
		// beregn centrum af tegneområde
		int cx = x1+(x2-x1)/2;
		int cy = y1+(y2-y1)/2;
		int radx = (x2-x1)/2 - 5;
		int rady = (y2-y1)/2 - 5;
		
		double vinkel=-Math.PI/2;
		//double vinkel_trin=2*(2*Math.PI/takker);
		double vinkel_trin=2*Math.PI/takker;
		double d=vinkel_trin;
		while (vinkel_trin+d<Math.PI) vinkel_trin+=d;
				
		for (int lp1=0; lp1<takker; lp1++)
		{
			if ( (takker==6) && (lp1==takker/2) ) vinkel += 2*Math.PI/takker;
			g.drawLine((int)(cx+radx*Math.cos(vinkel)), (int)(cy+rady*Math.sin(vinkel)), 
			           (int)(cx+radx*Math.cos(vinkel+vinkel_trin)), (int)(cy+rady*Math.sin(vinkel+vinkel_trin)) );
			vinkel += vinkel_trin;
		}

	}
	
	public void tegnskakbraet(Graphics g, int x1, int y1, int x2, int y2)
	{
		int soejler=4;
		int raekker=4;
		double sx=1.0*(x2-x1)/soejler;
		double sy=1.0*(y2-y1)/raekker;
		
		for (int lp1=0; lp1<soejler; lp1++)
			for (int lp2=0; lp2<raekker; lp2++)
			{
				g.setColor(Color.black);
				if (lp1%2==0)
				{
					if (lp2%2==0) 
						g.setColor(Color.white);
				} else {
					if (lp2%2==1)
						g.setColor(Color.white);
				}	
				
				g.fillRect(x1+(int)(lp1*sx), y1+(int)(lp2*sy), (int)sx, (int)sy );
			}
	}

	public void start()
	{
	}
	
	public void stop()
	{
	}



}
