package plots;

import java.awt.Polygon;

public class Arrow {
	public double[][] outline;

	// A B are angles at point, back of head
	public Arrow(double[] tail, double[] head, double shaftWidth, double headWidth, double A, double B) {
		double[][] o = new double[9][2];
		double dx = head[0]-tail[0], dy = head[1]-tail[1];
		double length = Math.sqrt(dx*dx + dy*dy);
		double a = Math.atan2(dy, dx);
		// first draw horizontal, then rotate by a
		o[0][0] = 0; o[0][1] = 0;
		o[8][0] = 0; o[8][1] = 0;
		o[1][0] = 0; o[1][1] = -shaftWidth/2;
		o[7][0] = 0; o[7][1] =   shaftWidth/2;
		o[4][0] = length; o[4][1] = 0;
		double cotA = Math.cos(A)/Math.sin(A);
		o[3][0] = length - (headWidth/2)*cotA; o[3][1] = -headWidth/2;
		o[5][0] = o[3][0]; o[5][1] = -o[3][1];
		double cotB = Math.cos(B)/Math.sin(B);
		o[2][0] = o[3][0] + 0.5*(headWidth - shaftWidth)*cotB; o[2][1] = -shaftWidth/2;
		o[6][0] = o[2][0]; o[6][1] = -o[2][1];

		outline = new double[9][];
		for (int i=0;i<9;i++) {
			outline[i] = rotate(o[i], a);
			outline[i][0] += tail[0];
			outline[i][1] += tail[1];
		}
	}

	static double[] rotate(double[] p, double A) {
		double c = Math.cos(A), s = Math.sin(A);
		double[] q = { c*p[0] - s*p[1], s*p[0] + c*p[1] };
		return(q);
	}

	public static double toRadians(double A) {
		return(A*Math.PI/180);
	}
	

}
	 