四点共面
程序员文章站
2024-03-23 18:12:22
...
`给出三维空间上的四个点(点与点的位置均不相同),判断这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”。
Sample Input
1
1 2 0
2 3 0
4 0 0
0 0 0
Sample Output
Yes
这道题就是考察一下三阶行列式:
三个向量AB=(x,y,z)AC=(x’,y’,z’)AD=(x”,y”,z”)
如果xy’z”+x’y”z+x”yz’-xy”z’-x’yz”-x”y’z=0则这三个点在同一平面
#include<stdio.h>
struct dian
{
int x,y,z;
}a[1001];
int main()
{
int t,i;scanf("%d",&t);
while(t--)
{
for(i=0;i<4;i++)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
}
int x1,y1,z1,x2,y2,z2,x3,y3,z3;
x1=a[0].x-a[1].x;x2=a[0].x-a[2].x;x3=a[0].x-a[3].x;
y1=a[0].y-a[1].y;y2=a[0].y-a[2].y;y3=a[0].y-a[3].y;
z1=a[0].z-a[1].z;z2=a[0].z-a[2].z;z3=a[0].z-a[3].z;
if(x1*y2*z3+x2*y3*z1+x3*y1*z2-x1*y3*z2-x2*y1*z3-x3*y2*z1==0)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}