平面平行度計算公式?
Ax+By+Cz+D=0這一平面)
2.在需要計算的面上找三點,通過公式計算出與面的距離D1,D2,D3,對這三個點進行計算以求的最終平面度
實現
1.求基準面
Test中調用情況(模擬數據輸入)
void Test() {
double array1[3][3] = { { 2.345,1.286,2.369 },{ 3.3847,3.345,3.534 },{ 4,4,4.2 }};
//定義數組指針指向第一個元素(int[])
double (*p)[3] = array1;
double * pABCD=getABCD(p);
cout<<"基準平面方程為:"<<pABCD[0]<<"X+"<<pABCD[1]<<"Y+"<<pABCD[2]<<"Z+"<<pABCD[3]<<"=0"<<endl;
}
三點求平面度公式
/*
計算基礎面平面公式系數
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,取平均值。最后即為真正的基準平面