(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦
题意:传送门
判断四点是否共面。
思路:
若三点共线,则ab,ac线性相关,其二阶行列式值为0.
若四点共面,则直线ab,ac,ad线性相关。其三阶行列式值为0.
AC代码:
#include <bits/stdc++.h>
using namespace std;
struct lp{
int x, y, z;
};
int is_coplanar(lp a, lp b, lp c, lp d){
lp ab, ac, ad;
ab.x=a.x-b.x, ab.y=a.y-b.y, ab.z=a.z-b.z;
ac.x=a.x-c.x, ac.y=a.y-c.y, ac.z=a.z-c.z;
ad.x=a.x-d.x, ad.y=a.y-d.y, ad.z=a.z-d.z;
int gg=ab.x*ac.y*ad.z+ab.y*ac.z*ad.x+ac.x*ad.y*ab.z;
gg-=ab.z*ac.y*ad.x+ab.x*ac.z*ad.y+ab.y*ac.x*ad.z;
return !gg;
}
int main(){
int tim;
cin >> tim;
while(tim--){
lp a, b, c, d;
cin >> a.x >> a.y >> a.z >> b.x >> b.y >> b.z >> c.x >> c.y >> c.z >> d.x >> d.y >> d.z;
if(is_coplanar(a, b, c, d)){
cout << "Yes" << "\n";
}else{
cout << "No" << "\n";
}
}
return 0;
}