icp演算法代碼
A. 哪位大神有ICP(迭代最近點)演算法的C++代碼,可以對兩組三維點雲進行配準的,求一個能用的,感激不盡……
創建一個pcl::PointCloud實例Final對象,存儲配准變換後的源點雲,應用ICP演算法後,IterativeClosestPoint能夠保存結果點雲集,如果這兩個點雲匹配正確的話(也就是說僅僅對其中一個應用某種剛體變換,就可以得到兩個在同一坐標系下相同的點雲)
B. ICP演算法的介紹
三維空間R3存在兩組含有n個坐標點的點集,分別為: PL和PR。三維空間點集PL中各點經過三維空間變換後與點集PR中點一一對應,其單點變換關系式為:(0-1)上式中,R為三維旋轉矩陣,t為平移向量。在ICP配准方法中,空間變換參數向量X可表示為[9] 。參數向量中四元數參數滿足約束條件為:(0-2)根據迭代的初值X0,由式(0-1)計算新點集Pi為:(0-3)式中,P表示原始未修改過的點集,Pi的下標i表示迭代次數,參數向量X的初始值X0為 。根據以上數據處理方法,ICP配准演算法可以概括為以下七個步驟:1) 根據點集Plk中的點坐標,在曲面S上搜索相應就近點點集Prk;2) 計算兩個點集的重心位置坐標,並進行點集中心化生成新的點集;3) 由新的點集計算正定矩陣N,並計算N的最大特徵值及其最大特徵向量;4) 由於最大特徵向量等價於殘差平方和最小時的旋轉四元數,將四元數轉換為旋轉矩陣R;5) 在旋轉矩陣R被確定後,由平移向量t僅僅是兩個點集的重心差異,可以通過兩個坐標系中的重心點和旋轉矩陣確定;6) 根據式(0-3),由點集Plk計算旋轉後的點集P』lk。通過Plk與P』lk計算距離平方和值為fk+1。以連續兩次距離平方和之差絕對值 作為迭代判斷數值;7) 當 時,ICP配准演算法就停止迭代,否則重復1至6步,直到滿足條件 後停止迭代
C. 【急求】c語言程序輸入一個整數(int),要求輸出其二進制形式的值。
我也發一個伏禪脊自編缺滲的,已驗證通過。
#include <stdio.h>
main()
{
char binOut[17];
short int i, j; /襲祥* 16bit的整數,要用short int型 */
scanf("%d", &i);
for(j=15;j>=0;j--)
{
if(i&(1<<j))
binOut[15-j] = '1';
else
binOut[15-j] = '0';
}
binOut[16] = 0;
printf("DEC(%d)=BIN(%s)\n",i,binOut);
}
D. C++實現RSA加密解密演算法
#include <iostream>
using namespace std;
template <class HugeInt>
HugeInt Power( const HugeInt & x, const HugeInt & n, // 求x^n mod p
const HugeInt & p )
{
if( n == 0 )
return 1;
HugeInt tmp = Power( ( x * x ) % p, n / 2, p );
if( n % 2 != 0 )
tmp = ( tmp * x ) % p;
return tmp;
}
template <class HugeInt>
void fullGcd( const HugeInt & a, const HugeInt & b, //
HugeInt & x, HugeInt & y )
{
HugeInt x1, y1;
if( b == 0 )
{
x = 1;
y = 0;
}
else
{
fullGcd( b, a % b, x1, y1 );
x = y1;
y = x1 - ( a / b ) * y1;
}
}
template <class HugeInt>
HugeInt inverse( const HugeInt & p, const HugeInt & q, // 求d
const HugeInt & e )
{
int fyn = ( 1 - p ) * ( 1 - q );
HugeInt x, y;
fullGcd( fyn, e, x, y );
return x > 0 ? x : x + e;
}
int main( )
{
cout << "Please input the plaintext: " << endl;
int m;
cin >> m;
cout << "Please input p,q and e: " << endl;
int p, q, e;
cin >> p >> q >> e;
int n = p * q;
int d = inverse( p, q, e );
int C = Power( m, e, n );
cout << "The ciphertext is: " << C << endl;
cout << "\n\nPlease input the ciphertext: " << endl;
cin >> C;
cout << "\n\nPlease input p, q and d: " << endl;
cin >> p >> q >> d;
n = p * q;
m = Power( C, d, n );
cout <<"The plaintext is: " << m << endl << endl;
system( "pause" );
return 0;
}
這就是RSA加密解密演算法