1265 四点共面

基准时间限制: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


//开始做几何题,有点难啊,四点,做成 3 个向量的话,必须是线性相关的,才会共面
线性相关,Xa = k1*Xb + k2*Xc ,存在一组,不全为 0 的 k1,k2,使之满足
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define LL long long
 4 #define MOD 1000000007
 5 
 6 struct Point
 7 {
 8     int x,y,z;
 9 }pt[5];
10 
11 int main()
12 {
13     int T;
14     scanf("%d",&T);
15     while (T--)
16     {
17         for (int i=1;i<=4;i++)
18             scanf("%d%d%d",&pt[i].x,&pt[i].y,&pt[i].z);
19         Point xa,xb,xc;
20         xa.x = pt[1].x-pt[2].x; xa.y = pt[1].y-pt[2].y; xa.z = pt[1].z-pt[2].z;
21         xb.x = pt[2].x-pt[3].x; xb.y = pt[2].y-pt[3].y; xb.z = pt[2].z-pt[3].z;
22         xc.x = pt[3].x-pt[4].x; xc.y = pt[3].y-pt[4].y; xc.z = pt[3].z-pt[4].z;
23         int val = xa.x*xb.y*xc.z + xa.y*xb.z*xc.x + xa.z*xb.x*xc.y;
24         val -= xa.z*xb.y*xc.x + xa.y*xb.x*xc.z + xa.x*xb.z*xc.y;
25         
26         if (val)
27             printf("No\n");
28         else
29             printf("Yes\n");
30     }
31     return 0;
32 }
View Code

 




posted @ 2017-09-23 20:00  happy_codes  阅读(131)  评论(0编辑  收藏  举报