您的位置:首页 > 其它

51NOD-1265四点共面

2016-09-22 18:58 232 查看
思路:

对于a,b,c三个点构成的两条向量求出叉乘积,再求第四个点与之前公共点向量的点乘积,如果等于0就共面

#include <iostream>
#include <stdio.h>
using namespace std;
struct node
{
double  x,y,z;
}a[5];
double xp,yp,zp;
void solve(node t1,node t2,node t3)
{
double x1=t2.x-t1.x;
double x2=t3.x-t1.x;
double y1=t2.y-t1.y;
double y2=t3.y-t1.y;
double z1=t2.z-t1.z;
double z2=t3.z-t1.z;
xp=(y1*z2-y2*z1);
yp=-(x1*z2-x2*z1);
zp=(x1*y2-x2*y1);
}
void ans(node t1,node t2)
{
double x1=t2.x-t1.x;
double y1=t2.y-t1.y;
double z1=t2.z-t1.z;
if((x1*xp+y1*yp+z1*zp)==0)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
{
for(int i=1;i<=4;i++)
{
cin>>a[i].x>>a[i].y>>a[i].z;
}
solve(a[1],a[2],a[3]);
ans(a[1],a[4]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: