1265 四点共面

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 收藏
 关注
给出三维空间上的四个点(点与点的位置均不相同),判断这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,b,c共面混合积等于0,

|ax bx cx|
|ay by cy|
|az bz cz|
该矩阵的秩为0,。

#include<stdio.h>
int t;
struct point{
double x;
double y;
double z;
};
point a,b,c,d;
int check(point o,point p,point q)
{
if(o.x*p.y*q.z+p.x*q.y*o.z+q.x*o.y*p.z-q.x*p.y*o.z-o.x*q.y*p.z-p.x*o.y*q.z==0)
return 1;
return 0;
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",&a.x,&a.y,&a.z,&b.x,&b.y,&b.z,&c.x,&c.y,&c.z,&d.x,&d.y,&d.z);
point ab={b.x-a.x,b.y-a.y,b.z-a.z};
point ac={c.x-a.x,c.y-a.y,c.z-a.z};
point ad={d.x-a.x,d.y-a.y,d.z-a.z};
if(check(ab,ac,ad)==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
 } 

阅读更多

没有更多推荐了,返回首页