生活随笔
收集整理的這篇文章主要介紹了
判断四个点是否在同一个平面上
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算出從同一個點出發的三個向量,如果這三個向量的x,y,z值所構成的行列式結果為零,則這四個點在同一平面上,否則不同一平面
如A,B,C,D四點
三個向量AB(x2-x1,y2-y1,z2-z1),AC(x3-x1,y3-y1,z3-z1),AD(x4-x1,y4-y1,z4-z1)(是向量,BA,AB是不同向量)
V=|[AB AC AD]|(混合積)
V= |x2-x1 y2-y1 z2-z1|
|x3-x1 y3-y1 z3-z1|
|x4-x1 y4-y1 z4-z1|
如果V=0,則四點共面
如果V!=0,則四點不同在一平面
#include<iostream>
#include<math.h>
#include<cmath>
using namespace std
;
typedef long long ll
;
typedef unsigned long long ull
;
class Point
{
public:int x
, y
, z
;Point(int a
, int b
, int c
){x
= a
;y
= b
;z
= c
;}
};
class isFlat
{
public:int x
, y
, z
;isFlat(int a
, int b
, int c
){x
= a
;y
= b
;z
= c
;}int cul(isFlat
& v2
, isFlat
& v3
){return(x
* (v2
.y
) * (v3
.z
) + (v2
.x
) * (v3
.y
) * z
+ y
* (v2
.z
) * (v3
.x
) - z
* (v2
.y
) * (v3
.x
) - x
* (v2
.z
) * (v3
.y
) - y
* (v2
.x
) * (v3
.z
));}
};
int main()
{int n
;cin
>> n
;while (n
--){int x1
, y1
, z1
, x2
, y2
, z2
, x3
, y3
, z3
, x4
, y4
, z4
;cin
>> x1
>> y1
>> z1
>> x2
>> y2
>> z2
>> x3
>> y3
>> z3
>> x4
>> y4
>> z4
;Point
p1(x1
, y1
, z1
), p2(x2
, y2
, z2
), p3(x3
, y3
, z3
), p4(x4
, y4
, z4
);isFlat
v1(x2
- x1
, y2
- y1
, z2
- z1
), v2(x3
- x1
, y3
- y1
, z3
- z1
), v3(x4
- x1
, y4
- y1
, z4
- z1
);int result
= v1
.cul(v2
, v3
);if (result
== 0){cout
<< "Yes" << endl
;}else{cout
<< "No" << endl
;}}return 0;
}
總結
以上是生活随笔為你收集整理的判断四个点是否在同一个平面上的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。