1265 四点共面
给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面)。如果共面,输出"Yes",否则输出"No"。
输入
第1行:一个数T,表示输入的测试数量(1 <= T <= 1000) 第2 - 4T + 1行:每行4行表示一组数据,每行3个数,x, y, z, 表示该点的位置坐标(-1000 <= x, y, z <= 1000)。
输出
输出共T行,如果共面输出"Yes",否则输出"No"。
输入样例
1 1 2 0 2 3 0 4 0 0 0 0 0
输出样例
Yes
先建立一个面,然后判断两一个点是否在该平面上.
1 #include <iostream> 2 using namespace std; 3 4 struct Node{ 5 double x, y, z; 6 }xn[5]; 7 int t; 8 double A, B, C, D; 9 10 void ptofdist(){ //点是否在面上 11 A = ((xn[2].y-xn[1].y)*(xn[3].z-xn[1].z)-(xn[2].z-xn[1].z)*(xn[3].y-xn[1].y)); 12 B = ((xn[2].z-xn[1].z)*(xn[3].x-xn[1].x)-(xn[2].x-xn[1].x)*(xn[3].z-xn[1].z)); 13 C = ((xn[2].x-xn[1].x)*(xn[3].y-xn[1].y)-(xn[2].y-xn[1].y)*(xn[3].x-xn[1].x)); 14 D = -(A * xn[1].x + B * xn[1].y + C * xn[1].z); 15 } 16 17 int main(){ 18 cin>>t; 19 while(t--){ 20 for(int i = 1; i <= 4; i++){ 21 cin>>xn[i].x>>xn[i].y>>xn[i].z; 22 } 23 ptofdist(); 24 double ret = A*xn[4].x+B*xn[4].y+xn[4].z*C+D; 25 if(ret == 0){ 26 puts("Yes"); 27 }else{ 28 puts("No"); 29 } 30 } 31 return 0; 32 }