第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
通過三點求出兩條直線的方向向量,通過方向向量求出這兩條直線所確定的平面法向量,點法式方程A(x-x1)-B(y-y1)*(z-z1)=0;
詳細看高數書吧。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4;
cin>>x1>>y1>>z1;
cin>>x2>>y2>>z2;
cin>>x3>>y3>>z3;
cin>>x4>>y4>>z4;
int a1=(x2-x1);
int b1=(y2-y1);
int c1=(z2-z1);
int a2=(x2-x3);
int b2=(y2-y3);
int c2=(z2-z3);
int A=(b1*c2-c1*b2);
int B=(a1*c2-c1*a2);
int C=(a1*b2-b1*a2);
if(A*(x4-x1)-B*(y4-y1)+C*(z4-z1)==0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}