package CookieCutter.g5;

import java.util.*;
import java.awt.*;
import java.awt.geom.*;

public class ConvexCorner extends Corner {
	//public ConvexCorner( int id, Point2D.Double prev, Point2D.Double mid, Point2D.Double next ) {
	public ConvexCorner( int id, int owner, Corner prev, Point2D.Double mid, Corner next ) {
		super( id, owner, prev, mid, next );
	}

	public double outerAngle() throws Exception {
		return( 2 * Math.PI - super._angle() );
	}

	public double innerAngle() throws Exception {
		return( super._angle() );
	}

	public Corner complement( Vector corners ) throws Exception {
		double minDiff = java.lang.Double.MAX_VALUE;
		Corner complCorner = null;

		for( int i = 0; i < corners.size(); i++ ) {
			Corner corner = ( Corner )corners.elementAt( i );

			if( corner.getClass().toString().endsWith( "ConcaveCorner" ) && !corner.isUsed() ) {
				double diff = super.idealMeasure( corner );

				if( Math.abs( diff ) < Math.abs( minDiff ) ) {
					minDiff = diff;
					complCorner = corner;
				}
			}
		}

		return( complCorner );
	}

	public double wastedArea( Corner corner ) throws Exception {
		if( corner.getClass().toString().endsWith( "ConcaveCorner" ) ) {
			return( corner.wastedArea( this ) );
		}

		return( java.lang.Double.MAX_VALUE );
	}

	public double[] angleBisector() {
		double bisector[] = super.angleBisector();
		bisector[0] = -bisector[0];
		bisector[1] = -bisector[1];
		return( bisector );
	}
}
