1.求基準面(在基準面上找三點通過公式計算出ax+by+cz+d=0這一平面)
2.在需要計算的面上找三點,通過公式計算出與面的距離d1,d2,d3,對這三個點進行計算以求的最終平面度
1.求基準面
test中呼叫情況(模擬資料輸入)
void
test()
,,};
//定義陣列指標指向第乙個元素(int)
double
(*p)[3
]= array1;
double
* pabcd=
getabcd
(p);
cout<<
"基準平面方程為:"
<
<<
"x+"
<
<<
"y+"
<
<<
"z+"
<
<<
"=0"
<
}
三點求平面度公式
/*
計算基礎面平面公式係數
parms:指向二維陣列的指標,其中陣列中裝著3個點的三維座標
ret:abcd係數的double陣列
*/double
*getabcd
(double
(*parms)[3
]){//定義裝載係數abcd的陣列
double result[4]
; result[0]
= parms[0]
[1]*parms[1]
[2]- parms[0]
[1]*parms[2]
[2]- parms[1]
[1]*parms[0]
[2]+ parms[1]
[1]* parms[2]
[2]+ parms[2]
[1]*parms[0]
[2]- parms[2]
[1]*parms[1]
[2];
result[1]
=-parms[0]
[0]*parms[1]
[2]+ parms[0]
[0]*parms[2]
[2]+ parms[1]
[0]*parms[0]
[2]- parms[1]
[0]* parms[2]
[2]- parms[2]
[0]* parms[0]
[2]+ parms[2]
[0]* parms[1]
[2];
result[2]
= parms[0]
[0]*parms[1]
[1]- parms[0]
[0]*parms[2]
[1]- parms[1]
[0]*parms[0]
[1]+ parms[1]
[0]*parms[2]
[1]+ parms[2]
[0]*parms[0]
[1]- parms[2]
[0]*parms[1]
[1];
result[3]
= parms[0]
[0]*parms[1]
[1]*parms[2]
[2]- parms[0]
[0]*parms[2]
[1]*parms[1]
[2]- parms[1]
[0]*parms[0]
[1]*parms[2]
[2]+ parms[2]
[0]*parms[0]
[1]*parms[1]
[2]+ parms[1]
[0]*parms[2]
[1]*parms[0]
[2]- parms[2]
[0]*parms[1]
[1]*parms[0]
[2];
//返回
double
*p = result;
return p
3.執行結果
但在沒有已知基準面的情況下,基準面計算需根據所有模擬輸入的點來計算,但目前只隨機取三點,結果偶然性極大,下一步會讓所有資料參加運算。
當前思路是首先去除無效值,即z(高度值)為極限值的資料,因為這些資料位置可能處於掃瞄底版。然後對剩餘資料進行分組處理,三個資料點一組,共計(n/3)組。這些資料分別計算基準平面的係數abcd,最後對abcd,取平均值。最後即為真正的基準平面。
平面計算幾何模版集合
這幾天學計算幾何,感覺自己很適合做這種型別的題目。畢竟數學還算學的不錯。尤其是幾何。模版是照著白書上敲的,會用就好,原理也都很簡單,能寫成函式並且運用就是好的。模版如下,方便以後自己用 include include include include include include using nam...
計算幾何 半平面交
la 4992 hdu 3761 jungle outpost 杭電的有點坑啊。一直爆記憶體,後來發現大白的半平面交模板那裡 point p new point n line q new line n 這裡出了問題,應該是在函式裡面申請不了比較大的陣列,所以爆記憶體。我在全域性定義了兩個陣列就不會爆...
計算幾何 半平面交
step1.將所有半平面按極角排序,對於極角相同的,選擇性的保留乙個。o nlogn step2.使用乙個雙端佇列 deque 加入最開始2個半平面。step3.每次考慮乙個新的半平面 a.while deque頂端的兩個半平面的交點在當前半平面外 刪除deque頂端的半平面 b.while deq...