给出三维空间上的四个点(点与点的位置均不相同),判断这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
通过三点求出两条直线的方向向量,通过方向向量求出这两条直线所确定的平面法向量,点法式方程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;
}