四点共面

四个点构造三个向量,形成一个行列式 
若行列式的值为0,则共面;不为0,则不共面 

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 收藏
 关注
给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面)。如果共面,输出"Yes",否则输出"No"。
Input
第1行:一个数T,表示输入的测试数量(1 <= T <= 1000)
第2 - 4T + 1行:每行4行表示一组数据,每行3个数,x, y, z, 表示该点的位置坐标(-1000 <= x, y, z <= 1000)。
Output
输出共T行,如果共面输出"Yes",否则输出"No"。
Input示例
1
1 2 0
2 3 0
4 0 0
0 0 0
Output示例
Yes
 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 struct a{
 5     int x,y,z;
 6 }dian[6];
 7 int main()
 8 {
 9     int T;
10     scanf("%d",&T);
11     while(T--)
12     {
13         for (int i=0;i<4;i++)
14         cin>>dian[i].x>>dian[i].y>>dian[i].z;
15         int x1=dian[1].x-dian[0].x;
16         int x2=dian[2].x-dian[0].x;
17         int x3=dian[3].x-dian[0].x;
18         int y1=dian[1].y-dian[0].y;
19         int y2=dian[2].y-dian[0].y;
20         int y3=dian[3].y-dian[0].y;
21         int z1=dian[1].z-dian[0].z;
22         int z2=dian[2].z-dian[0].z;
23         int z3=dian[3].z-dian[0].z;
24         long long S=x1*y2*z3+x2*y3*z1+x3*y1*z2-x1*y3*z2-x2*y1*z3-x3*y2*z1;
25         if(S==0) cout<<"Yes"<<endl;
26         else cout<<"No\n"<<endl;
27     }
28     return 0;
29 }

 

posted @ 2018-07-14 17:18  jealous-boy  阅读(542)  评论(0)    收藏  举报