51Nod 1265四點共面

2021-08-18 13:46:59 字數 1070 閱讀 1935

題目要求在控制台輸入四個點的座標(三維),然後判斷這四個點是否在同乙個平面上。

剛剛看到這個題目的時候有一點懵,靜下心來想了想,是不是可以用向量的方式去解決這個問題。因為四個點的座標已知,由此就可以得到由其中三個點組成的兩個向量,隨後就可以求出與這兩個向量垂直的向量,最後用剩下乙個點和前面的任意點組成乙個向量,只要能與垂直的向量相垂直,就可以得出四點共面的結論。

可是如何求出與兩個向量垂直的向量呢? 我也不知道,所以我去網上看了一下部落格,發現這個部落格講的比較好:

裡面把向量叉積講的比較清楚,同時我也知道了在三維空間內,兩個向量的叉積就是與它們組成的平面垂直的向量。這個問題解決的話,這個問題就比較簡單了。話不多說上**:

#include#include#include#include#define maxn 500

typedef long long int ll;

using namespace std;

struct pointp[maxn];

int n;

ll dmul(point a,point b)//求點積

point xmul(point a,point b)

point subpoint(point a,point b)

point fa(point a,point b,point c)

bool ok(point a,point b,point c,point d)

int main()

if(ok(p[0],p[1],p[2],p[3]))

cout<<"yes"《通過**我們可以看到fa函式是用來獲取兩個引數向量的法向量的,同時我們寫了乙個subpoint函式來獲取由兩個點組成的向量,ok函式是對其他函式的乙個封裝,所以在控制台只要把四個點作為引數傳遞給ok函式就可以得到結果。

注:我們應該注意函式的引數到達指的是乙個點,還是乙個向量,理解了才能自己用手寫出來。

最後請教了一下實驗室的黃學長,得知也可以用矩陣來解決這個問題,把由四個點中的點兩兩組成的三個向量作為列向量,就可以得到乙個矩陣,通過判斷矩陣的值是否為0就可以得出四點是否共面,但是其實和求叉積的過程是非常相像的。

每一天的堅持都在為未來添磚加瓦!

51nod1265四點共面

原題鏈結 四點共面即以某點指向其它三點的向量的混合積為0 如下 include include include include include include include include include include include include define ll long long us...

51Nod 1265 四點共面

1265 四點共面 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出三維空間上的四個點 點與點的位置均不相同 判斷這4個點是否在同乙個平面內 4點共線也算共面 如果共面,輸出 yes 否則輸出 no input 第1行 乙個數t,表示輸入的測試數量 1 t 1000 ...

51nod1265 四點共面

傳送門 點我 給出三維空間上的四個點 點與點的位置均不相同 判斷這4個點是否在同乙個平面內 4點共線也算共面 如果共面,輸出 yes 否則輸出 no input 第1行 乙個數t,表示輸入的測試數量 1 t 1000 第2 4t 1行 每行4行表示一組資料,每行3個數,x,y,z,表示該點的位置座標...