package automatvgi.drawing.tools;

import java.awt.Color;
import java.awt.Graphics;

import automatvgi.Projection;
import automatvgi.tools.Point;
import automatvgi.tools.Vector;

public class DrawShape {
	public static void drawLine(Graphics g, int x, int y, int xp, int yp, int ep, Color line){
		if(ep<2){
			g.setColor(line);
			g.drawLine(x, y, xp, yp);
		}
		double theta=Math.atan2(yp-y, xp-x);
		double norm=Math.hypot(xp-x, yp-y);
		for(int i=0; i< norm; i++){
			int xc=(int)(x+i*Math.cos(theta));
			int yc=(int)(y+i*Math.sin(theta));
			drawDisk(g, xc, yc, ep/2, line);
		}
		drawDisk(g, xp, yp, ep/2, line);	
	}

	public static void drawDisk(Graphics g, int x, int y, int r,Color c){
		g.setColor(c);
		g.fillOval(x-r,y-r,2*r,2*r);		
	}
	
	public static void drawCircle(Graphics g, int x, int y, int r, int ep,Color line, Color fill){
		double halfEp=ep/2;
		int rc=(int)(r+halfEp);
		drawDisk(g, x, y, rc, line);
		rc=(int)(r-halfEp)-1;
		drawDisk(g, x, y, rc, fill);
	}

	public static void drawArrow(Graphics g, Point p,Vector v,Projection j){
		Vector va=new Vector(v);
		va.scal(1.2);
		Vector vb=new Vector(va);
		va.rot(Math.PI/12);
		vb.rot(-Math.PI/12);
		Point pa=p.subTo(va);
		Point pb=p.subTo(vb);
		Point pc=p.subTo(v);
		int[] px={j.getAbs(p),j.getAbs(pa),j.getAbs(pc),j.getAbs(pb)};
		int[] py={j.getOrd(p),j.getOrd(pa),j.getOrd(pc),j.getOrd(pb)};
		g.fillPolygon(px,py,4);
	}
}
