AOJ 0012 A Point in a Triangle

リンク AOJ 0012 A Point in a Triangle

方針

もし、pが三角形の内部にあるのなら、3つの三角形pab,pbc,pacの和と、元の三角形abcの面積は等しくなります。それを利用しました。


ただ、この世には「外積」という便利なものがあります。
本来はそちらを使うべきでしょうね。

ソース

import java.util.*;
public class Main{
    static Scanner sc = new Scanner(System.in);
    static double x1, y1, x2, y2, x3, y3, xp, yp;
    static double S_pab, S_pac, S_pbc, S_abc;
    public static void main(String[] args){
        while(read()){
            slove();
        }
    }
    static boolean read(){
        if(!sc.hasNext())
            return false;
        x1 = sc.nextDouble();
        y1 = sc.nextDouble();
        x2 = sc.nextDouble();
        y2 = sc.nextDouble();
        x3 = sc.nextDouble();
        y3 = sc.nextDouble();
        xp = sc.nextDouble();
        yp = sc.nextDouble();
        return true;
    }

    static void slove(){
        S_pab = Math.abs((x1-xp)*(y2-yp)-(x2-xp)*(y1-yp));
        S_pac = Math.abs((x1-xp)*(y3-yp)-(x3-xp)*(y1-yp));
        S_pbc = Math.abs((x2-xp)*(y3-yp)-(x3-xp)*(y2-yp));
        S_abc = Math.abs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1));
        if(S_abc == S_pab + S_pac + S_pbc){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }
    }
}