攝影測量老師布置的作業,大火可以參考看看
其實最主要的就是矩陣運算的函式,c++沒有矩陣運算的庫,所以只能自己寫函式。
下面**部分的矩陣相關的函式可以直接拿走用。
如果有也需要寫內定向程式設計的同學可以改框標座標等這些資料來完成自己的程式設計。
#includeusing std::cout;
using std::cin;
using std::endl;
void printarray(double* a, int b, int c)
cout << endl; }}
void transpositionarray(double* a, double* at, int b, int c) }}
void multiplyarray(double* a, double* b, double* c, int m, int n, int l)
for (int i = 0; i < m; i++)
} }}void make2array(double**& a, int n)
for (i = 0; i < n; i++) }
}void deletarray(double**& a, int n)
deletea;
}//矩陣求逆
//ip為要求逆的矩陣,rp是返回的逆矩陣,矩陣維數為n
//行列式為0,返回0;否則返回值為1
int converse(double* ip, double* rp, int n)
mat[i][n + i] = 1; //初始化右側的單位矩陣
} //做行變換化為上三角陣
for (i = 0; i < n; i++)
break; //跳出j迴圈 }}
} if (mat[i][i] == 0) return 0; //行列式為0則返回
for (j = i + 1; j < n; j++)
}} //化成單位矩陣
for (i = n - 1; i >= 0; i--) }
//將結果輸出
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
rp[i * n + j] = mat[i][j + n];
//mat矩陣釋放
deletarray(mat, n);
return 1;
}int main() ;
//讀入框標座標系的框標座標
double a[8][6] = ;
//讀入掃瞄座標像主點座標
double x0 = -0.004, y0 = 0.008;
//求解轉換引數,依據公式v=ax-l,求得轉換引數x
//求a的轉置矩陣az
double az[6][8];
transpositionarray(&a[0][0], &az[0][0], 8, 6);
double az_a[6][6];//定義a的轉置與a相乘矩陣az_z
multiplyarray(&az[0][0], &a[0][0], &az_a[0][0], 6, 8, 6);
double an[6][6];//求az_a的逆矩陣
converse(&az_a[0][0], &an[0][0], 6);
double xs_a[6][8];
multiplyarray(&an[0][0], &az[0][0], &xs_a[0][0], 6, 6, 8);
double x[6][1];
multiplyarray(&xs_a[0][0], &l[0][0], &x[0][0], 6, 8, 1);
double m0 = x[0][0], m1 = x[1][0], m2 = x[2][0], n0 = x[3][0], n1 = x[4][0], n2 = x[5][0];
cout << "轉換引數:" << endl;
cout << "m0 = " << x[0][0] << endl;
cout << "m1 = " << x[1][0] << endl;
cout << "m2 = " << x[2][0] << endl;
cout << "n0 = " << x[3][0] << endl;
cout << "n1 = " << x[4][0] << endl;
cout << "n2 = " << x[5][0] << endl;
//求任意一畫素的框標座標
int i, j;
double x1, y1, x, y;
cout << "畫素座標行數(整數):";
cin >> i;
cout << "畫素座標列數(整數):";
cin >> j;
x1 = m0 + m1 * i - m2 * j;
y1 = n0 + n1 * i - n2 * j;
x = x1 - x0;
y = y1 - y0;
cout << "框標座標系下的座標為:" << x << "," << y << endl;
}
內定向程式演算法
終於寫出來第二個攝影測量的程式了,感慨萬千。對於程式設計學習,還是要多付出實踐,才會有收穫。以像主點為原點的像平面座標系的像點座標 float kuangbiao 16 掃瞄座標系下框標座標的行列號 float a num 16 6 a陣為16行6列 float x0 0.004 x偏移量 floa...
shell程式設計之重定向
一 重定向簡介 1.重定向基本概念 計算機最基礎的功能是可以提供輸入輸出操作,常見的輸入輸出有鍵盤 滑鼠 掃瞄器等,對於linux系統來說,通常以鍵盤為預設輸入裝置,又稱標準輸入裝置 計算機常見的輸入裝置有顯示器 蜂鳴器 印表機等,而linux系統則以顯示器為預設輸出裝置,又稱標準輸出裝置。所謂 重...
網路程式設計之重定向
1 使用c r e a t e f i l e這個a p i函式,應用程式向本地作業系統提交乙個請求,要求開啟 m y s e r v e r m y s h a r e s a m p l e m p 3。2 根據從u n c路徑描述中獲得的資訊,本地 本機 作業系統的檔案系統判斷出該i o 輸入...