AOJ Volume0 no.012

no10をちょっと、応用した問題。解法はほぼ同じ。

package levelZero;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class APointinaTriangle {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		triangle();
	}

	private static void triangle() throws IOException {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);

		String buf = br.readLine();

		String[] triangle = buf.split(" ");
		double x1 = Double.parseDouble(triangle[0]);
		double y1 = Double.parseDouble(triangle[1]);
		double x2 = Double.parseDouble(triangle[2]);
		double y2 = Double.parseDouble(triangle[3]);
		double x3 = Double.parseDouble(triangle[4]);
		double y3 = Double.parseDouble(triangle[5]);
		double xp = Double.parseDouble(triangle[6]);
		double yp = Double.parseDouble(triangle[7]);

		double ax = (x1 - x2);
		double ay = (y1 - y2);
		double a = Math.sqrt(ax * ax + ay * ay);

		double bx = (x2 - x3);
		double by = (y2 - y3);
		double b = Math.sqrt(bx * bx + by * by);

		double cx = (x3 - x1);
		double cy = (y3 - y1);
		double c = Math.sqrt(cx * cx + cy * cy);

		double radius = (a * b * c)
				/ (Math.sqrt((a + b + c) * (-a + b + c) * (a - b + c)
						* (a + b - c)));

		double a1 = 2 * (x2 - x1);
		double b1 = 2 * (y2 - y1);
		double c1 = (x1 * x1 - x2 * x2 + y1 * y1 - y2 * y2);
		double a2 = 2 * (x3 - x1);
		double b2 = 2 * (y3 - y1);
		double c2 = (x1 * x1 - x3 * x3 + y1 * y1 - y3 * y3);

		double centerX = (b1 * c2 - b2 * c1) / (a1 * b2 - a2 * b1);
		double centerY = (c1 * a2 - c2 * a1) / (a1 * b2 - a2 * b1);

		double distanceX = (centerX - xp);
		double distanceY = (centerY - yp);
		double distance = Math.sqrt(distanceX * distanceX + distanceY
				* distanceY);

		if (radius > distance) {
			System.out.println("YES");
		} else {
			System.out.println("NO");
		}
		br.close();
	}
}