51 Nod 1265 四点共面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51 Nod 1265 四点共面相关的知识,希望对你有一定的参考价值。

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#problemId=1265&noticeId=352691

题意:判断四点共面

题解:假设有a,b,c,d四个点,如果ab,ac,ad三个向量线性相关,那么三个向量共面(充要条件)。

如何判断三个向量是否线性相关,以三个向量元素列一个3x3的行列式,如果求得的值为0,说明线性相关。

证明:如果ab,ac,ad线性相关,那么ab=k1*ac+k2*ad,根据行列式的性质:如果两行(列)成比例,那么行列式的值为0。

(这个可以先把系数提取出来,然后就有两行(列)相同,行列式的值为0)

 1 #include <iostream>
 2 using namespace std;
 3 
 4 struct point{
 5     int x,y,z;
 6 };
 7 
 8 int is_coplanar(point a,point b,point c,point d){
 9     point ab,ac,ad;
10     ab.x=a.x-b.x,ab.y=a.y-b.y,ab.z=a.z-b.z;
11     ac.x=a.x-c.x,ac.y=a.y-c.y,ac.z=a.z-c.z;
12     ad.x=a.x-d.x,ad.y=a.y-d.y,ad.z=a.z-d.z;
13     int tmp=ab.x*ac.y*ad.z+ab.y*ac.z*ad.x+ac.x*ad.y*ab.z;
14     tmp-=ab.z*ac.y*ad.x+ab.x*ac.z*ad.y+ab.y*ac.x*ad.z;
15     return tmp;
16 }
17 
18 int main(){
19     int t;
20     cin>>t;
21     while(t--){
22         point a,b,c,d;
23         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;
24         if(!is_coplanar(a,b,c,d)) cout<<"Yes"<<endl;
25         else cout<<"No"<<endl;
26     }
27     
28     return 0;
29 }

 

以上是关于51 Nod 1265 四点共面的主要内容,如果未能解决你的问题,请参考以下文章

51nod--1265 四点共面

51nod1265 四点共面

51Nod1265 四点共面

51nod_1265:四点共面(计算几何)

51nod 1265 四点共面

51 nod 1265 四点共面