只要四点不重合,任意三点不在一条直线上就可以了
#include
#include
#include
#define MIN(a,b) ((a)
#define MAX(a,b) ((a)>(b)?(a):(b))
const double eps = 1e-8;
const double pi = acos(-1.0);
inline bool zero(double x){
return fabs(x)
}
struct point{ //点
double x,y;
};
struct line{ //直线 Ax + By + C = 0
double a,b,c;
};
line get_line(point& p1, point& p2){ //直线两点 返回Ax + By + C = 0形式 OK
line res;
res.a = p2.y-p1.y;
res.b = p1.x-p2.x;
res.c = p2.x*p1.y - p1.x*p2.y;
return res;
}
int parallel(line& l, line& l2){ //两直线平行 1平行 2重合 0... OK
if(zero(l.a * l2.b - l2.a * l.b)){
if(zero(l.a * l2.c - l2.a * l.c) && zero(l.b * l2.c - l2.b * l.c)) return 2;
return 1;
}
return 0;
}
int main()
{
int k = 1;
point a,b,c,d;
line aa,bb,cc,dd;
scanf("%lf%lf",&a.x,&a.y);
scanf("%lf%lf",&b.x,&b.y);
scanf("%lf%lf",&c.x,&c.y);
scanf("%lf%lf",&d.x,&d.y);
aa = get_line(a,b);
bb = get_line(b,c);
cc = get_line(c,d);
dd = get_line(d,a);
if(parallel(aa,bb)==2)k = 0;
if(parallel(cc,bb)==2)k = 0;
if(parallel(cc,dd)==2)k = 0;
if(parallel(aa,dd)==2)k = 0;
if(k==0)puts("can not");
else puts("can");
return 0;
}