思路:
a[1] a[2] a[3] a[4] 为四个点。
a1a2和a1a3所构成的面的法向量:point fa = ( a[2] - a[1] ) x ( a[3] - a[1] );
注意在通过三阶矩阵算法向量的时候,j的前边要乘一个负号。。我就是好久没学线代把矩阵的解法都忘了。。
#include <iostream>
#include <cmath>
#include <cstdio>
#include <string.h>
#include <algorithm>
#define pi acos(-1)
#define eps 1e-6
typedef long long int lli;
using namespace std;
struct point{
lli x,y,z;
point(){}
point(lli xx,lli yy,lli zz){x=xx,y=yy,z=zz;}
point operator * (point t){
return point(y*t.z-t.y*z,-x*t.z+t.x*z,x*t.y-y*t.x);
}
point operator - (point t){
return point(x-t.x,y-t.y,z-t.z);
}
}a[20];
lli dot(point a,point b){
return a.x*b.x+a.y*b.y+a.z*b.z;
}
bool gongmian(){
point fa = (a[2]-a[1])*(a[3]-a[1]);
if(dot(fa,a[4]-a[1]) == 0)
return true;
return false;
}
int main(){
int t;cin>>t;
while(t--){
for(int i = 1;i <= 4;i++){
scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
}
if(gongmian() == false){
printf("No\n");continue;
}
puts("Yes");
}
return 0;
}
本文介绍了一种用于判断四个三维空间中点是否共面的算法实现。通过计算由三点构成平面的法向量,并利用点乘运算来验证第四点是否位于同一平面上。文章提供了完整的C++代码示例。
5276

被折叠的 条评论
为什么被折叠?



