import java.awt.geom.Path2D;
import java.util.Scanner;
import java.util.stream.Stream;
/*
プログラミングのお題スレ Part12
//mevius.5ch.net/test/read.cgi/tech/1538096947/803
> 803 名前:デフォルトの名無しさん[] 投稿日:2018/12/12(水) 02:35:41.59 ID:84v7sPOJ
> お題
> 2次元平面上で点(x,y)が点列(X1,Y1), (X2,Y2), ..., (Xn,Yn), (X1,Y1)を順に結んでできる多角形の内部にあるかどうか判定せよ
内側の定義
//docs.oracle.com/javase/jp/8/docs/api/java/awt/Shape.html#def_insideness
*/
class Ideone
{
public static void main
(String[] args
) {
try (Scanner in
= new Scanner
(System.
in)) {
while (in.hasNextLine())
{
double[] ds
= Stream.
of(in.
nextLine().
split("[ ,]")).
mapToDouble(Double::parseDouble
).
toArray(); Path2D path
= new Path2D.
Double(); path.moveTo(ds[2], ds[3]);
for (int i = 4; i < ds.length - 1; i += 2)
{
path.lineTo(ds[i], ds[i + 1]);
}
boolean non_zero = path.contains(ds[0], ds[1]);
path.setWindingRule(Path2D.WIND_EVEN_ODD);
boolean even_odd = path.contains(ds[0], ds[1]);
System.
out.
printf("non_zero:%s\teven_odd:%s%n", non_zero, even_odd
); }
}
}
}
aW1wb3J0IGphdmEuYXd0Lmdlb20uUGF0aDJEOwppbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTsKCi8qCuODl+ODreOCsOODqeODn+ODs+OCsOOBruOBiumhjOOCueODrCBQYXJ0MTIgCi8vbWV2aXVzLjVjaC5uZXQvdGVzdC9yZWFkLmNnaS90ZWNoLzE1MzgwOTY5NDcvODAzCj4gODAzIOWQjeWJje+8muODh+ODleOCqeODq+ODiOOBruWQjeeEoeOBl+OBleOCk1tdIOaKleeov+aXpe+8mjIwMTgvMTIvMTIo5rC0KSAwMjozNTo0MS41OSBJRDo4NHY3c1BPSgo+IOOBiumhjAo+IDLmrKHlhYPlubPpnaLkuIrjgafngrkoeCx5KeOBjOeCueWIlyhYMSxZMSksIChYMixZMiksIC4uLiwgKFhuLFluKSwgKFgxLFkxKeOCkumghuOBq+e1kOOCk+OBp+OBp+OBjeOCi+WkmuinkuW9ouOBruWGhemDqOOBq+OBguOCi+OBi+OBqeOBhuOBi+WIpOWumuOBm+OCiAoK5YaF5YG044Gu5a6a576pCi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS9qcC84L2RvY3MvYXBpL2phdmEvYXd0L1NoYXBlLmh0bWwjZGVmX2luc2lkZW5lc3MKKi8KY2xhc3MgSWRlb25lCnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgdHJ5IChTY2FubmVyIGluID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKSkKICAgICAgICB7CiAgICAgICAgICAgIHdoaWxlIChpbi5oYXNOZXh0TGluZSgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkb3VibGVbXSBkcyA9IFN0cmVhbS5vZihpbi5uZXh0TGluZSgpLnNwbGl0KCJbICxdIikpLm1hcFRvRG91YmxlKERvdWJsZTo6cGFyc2VEb3VibGUpLnRvQXJyYXkoKTsKICAgICAgICAgICAgICAgIFBhdGgyRCBwYXRoID0gbmV3IFBhdGgyRC5Eb3VibGUoKTsKICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKGRzWzJdLCBkc1szXSk7CiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gNDsgaSA8IGRzLmxlbmd0aCAtIDE7IGkgKz0gMikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyhkc1tpXSwgZHNbaSArIDFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJvb2xlYW4gbm9uX3plcm8gPSBwYXRoLmNvbnRhaW5zKGRzWzBdLCBkc1sxXSk7CiAgICAgICAgICAgICAgICBwYXRoLnNldFdpbmRpbmdSdWxlKFBhdGgyRC5XSU5EX0VWRU5fT0REKTsKICAgICAgICAgICAgICAgIGJvb2xlYW4gZXZlbl9vZGQgPSBwYXRoLmNvbnRhaW5zKGRzWzBdLCBkc1sxXSk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50Zigibm9uX3plcm86JXNcdGV2ZW5fb2RkOiVzJW4iLCBub25femVybywgZXZlbl9vZGQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cg==
MC41LDAuNSAwLDAgMSwwIDEsMSAwLDEKMS43NiwxLjc1IDAsMCAzLDAgMiwxLjUgMSwyLjUgMCwzCjUwLDUwIDIsMzUgOTgsMzUgMjEsOTAgNTAsMCA3OSw5MAo=
0.5,0.5 0,0 1,0 1,1 0,1
1.76,1.75 0,0 3,0 2,1.5 1,2.5 0,3
50,50 2,35 98,35 21,90 50,0 79,90