只需要判断:三个顶点两两与原点围成的三个小三角形面积之和等不等于这三个点围成的大三角形面积
注:要注意一点 因为题目是说把原点包含在内 所以这三个小三角形面积都不能为0
#include <bits/stdc++.h>
using namespace std;
struct s{
int x1;
int y1;
int x2;
int y2;
int x3;
int y3;
}ss[100000];
double area(int a1,int b1,int a2,int b2,int a3,int b3){
double a=sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
double b=sqrt((a2-a3)*(a2-a3)+(b2-b3)*(b2-b3));
double c=sqrt((a1-a3)*(a1-a3)+(b1-b3)*(b1-b3));
double p=(a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>ss[i].x1>>ss[i].y1>>ss[i].x2>>ss[i].y2>>ss[i].x3>>ss[i].y3;
}
for(int i=1;i<=n;i++){
int a1=ss[i].x1,b1=ss[i].y1;
int a2=ss[i].x2,b2=ss[i].y2;
int a3=ss[i].x3,b3=ss[i].y3;
double s=area(a1,b1,a2,b2,a3,b3);
double s1=area(0,0,a2,b2,a3,b3);
double s2=area(a1,b1,0,0,a3,b3);
double s3=area(a1,b1,a2,b2,0,0);
double ss=s1+s2+s3;
// printf("%.5lf %.5lf %.5lf %.5lf %.5lf\n",s,ss,s1,s2,s3);
if(abs(s-ss)<1&&s1!=0&&s2!=0&&s3!=0){
puts("YES");
}
else puts("NO");
}
return 0;
}