AOJ - Problem 0035 : Is it Convex?

線分ACと直線BD,あるいは直線ACと線分BDのどちらかが交差していない場合は、
凹みのある四角形です。
線分や縁の交差判定はよく使うので慣れておきたいものです。

#include <complex>
#include <cstdio>
#include <cmath>
using namespace std;

// 点座標を型とする
typedef complex<double> P;

//XY座標
#define X real()
#define Y imag()

// 直線p1,p2と線分p3,p4の交差判定
// (n < 0)<=>交差 , (n == 0)<=>直線上, (n > 0)<=>交差していない  
double isIntersect(P p1, P p2, P p3, P p4){  
    return ( (p1.X-p2.X)*(p3.Y-p1.Y) + (p1.Y-p2.Y)*(p1.X-p3.X)) * ((p1.X-p2.X)*(p4.Y-p1.Y) + (p1.Y-p2.Y)*(p1.X-p4.X));  
}

int main(){
	double xa, xb, xc, xd, ya, yb, yc, yd;

	while( scanf("%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf", &xa, &ya, &xb, &yb, &xc, &yc, &xd, &yd) != EOF ){
		P a( xa , ya );
		P b( xb , yb );
		P c( xc , yc );
		P d( xd , yd );
		
		if( isIntersect(a,c,b,d) > 0.0 || isIntersect(b,d,a,c) > 0.0 ){
			printf("NO\n");
		}else{
			printf("YES\n");
		}
	}
}