1265 四点共面

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 }

猜你喜欢

转载自www.cnblogs.com/zllwxm123/p/9924545.html