//Bermuda Triangle Program. Prints out a representation
//of the Triangle's Position after geting the Bermuda Triangle's
//co-ordinates from 3 input boxes.
//Try 64-50-W-32-14-N, 66-30-W-18-15-N and 80-5-W-26-0-N to make Bermuda.
//by www.neiljohan.com

import java.io.*;
import javax.swing.JFrame;

public class PositionMain
{
    public static void main(String[] pArgs) throws IOException
        {
            String Mesg1 = "Please type in co-ordinate 1";
            String Mesg2 = "Please type in co-ordinate 2";
            String Mesg3 = "Please type in co-ordinate 3";
            

            JFrame tJFrame1 = new JFrame("Position 1");
            final PositionInputBox tPositionFormJFrame1 = new PositionInputBox(tJFrame1,Mesg1);
            final Position tPosition1 = tPositionFormJFrame1.getPosition();
            JFrame tJFrame2 = new JFrame("Position 2");
            final PositionInputBox tPositionFormJFrame2 = new PositionInputBox(tJFrame2,Mesg2);
            final Position tPosition2 = tPositionFormJFrame2.getPosition();
            JFrame tJFrame3 = new JFrame("Position 3");
            final PositionInputBox tPositionFormJFrame3 = new PositionInputBox(tJFrame3,Mesg3);
            final Position tPosition3 = tPositionFormJFrame3.getPosition();
            
            System.out.println("Bermuda Triangle");

            String tCoord;

            System.out.print("    ");
            for (int tLong = 85; tLong >=60; tLong--){
                System.out.print(tLong);
                
            }
            System.out.println();
            
            for (int tLat = 35; tLat >=15; tLat--){
                System.out.print(tLat + ": ");
                
                for (int tLong = 85; tLong >=60; tLong--){
                    
                    tCoord = tLong + "-0-W-" + tLat + "-0-N";
                    Position tPoint = new PositionImpl(tCoord);

                    if (iIsInside(tPosition1,tPosition2,tPosition3,tPoint))
                    {
                        System.out.print("X ");
                    }
                    else
                    {
                        System.out.print(". ");
                    }
                }
                System.out.println("");
            }
        }


        private static boolean iIsInside(final Position pPosition1,final Position pPosition2,final Position pPosition3,final Position pMe)
        {
            final double x1 = pPosition1.getLongitude();
            final double y1 = pPosition1.getLatitude();
            final double x2 = pPosition2.getLongitude();
            final double y2 = pPosition2.getLatitude();
            final double x3 = pPosition3.getLongitude();
            final double y3 = pPosition3.getLatitude();
            final double x0 =        pMe.getLongitude();
            final double y0 =        pMe.getLatitude();
            //thanks to Horst Kraemer for the clever stuff from here on
        final double  d = (x2-x1)*(y3-y1) - (y2-y1)*(x3-x1);
        final double  a = (x0-x1)*(y3-y1) - (y0-y1)*(x3-x1);
        final double  b = (x2-x1)*(y0-y1) - (y2-y1)*(x0-x1);
        if (d==0)
        {
            return true;
        }
        return 0<=a/d && 0<=b/d && a/d+b/d<=1;
        } 
}

            
    

