51nod 1265 四点共面
给出三维空间上的四个点(点与点的位置均不相同),判断这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
满足Ax+By+Cz+d=0就成立。
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 using namespace std; 5 struct Point{ 6 int x, y, z; 7 }; 8 9 int main(){ 10 int t; 11 scanf("%d",&t); 12 while(t--) { 13 Point a, b, c, d; 14 scanf("%d%d%d%d%d%d%d%d%d%d%d%d",&a.x,&a.y,&a.z,&b.x,&b.y,&b.z,&c.x,&c.y,&c.z,&d.x,&d.y,&d.z); 15 a.x = b.x-a.x; a.y = b.y-a.y; a.z = b.z-a.z; 16 b.x = c.x-b.x; b.y = c.y-b.y; b.z = c.z-b.z; 17 c.x = d.x-c.x; c.y = d.y-c.y; c.z = d.z-c.z; 18 if(a.x*b.y*c.z+a.y*b.z*c.x+a.z*b.x*c.y-a.z*b.y*c.x-a.y*b.x*c.z-a.x*b.z*c.y == 0) 19 cout << "YES\n"; 20 else cout << "NO\n"; 21 } 22 return 0; 23 }