91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 3KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2024-01-25
  • 語言: C/C++
  • 標簽: MLS??

資源簡介

這是MLS基于C++代碼實現,矩陣類運算再我的另一個資源中。代碼僅供學習的,不能直接運行,需要調用。

資源截圖

代碼片段和文件信息

#include?
#include
#include
#include?“Matrix.h“

#include
#include
#define?M?8//采樣點的個數
#define?N?6//基數個數,線性基三個,二次基六個,三次基十個

using?namespace?std;
using?namespace?cv;
int?max_x=0;
int?min_x=0;

typedef?struct?point
{
double?x;
double?y;
}point;
typedef?struct?Lnode
{
int?data;
struct?Lnode?*next;
}Lnode*linklist;
extern?void?Beizer(vectornklist>&p_M);
Matrix_Calc?m_c;//定義Matrix_Calc對象

//將m行N列數組轉換為m行N列的矩陣
Matrix?Trans_Matrix(float?p[][N]int?m)
{
Matrix?C(mN);
C.init_Matrix();
for(int?i=0;i for(int?j=0;j {
C.write(ijp[i][j]);
}
return?C;
}
//將1行N列數組轉換為1行N列的矩陣
Matrix?Trans_Matrix_One(float?p[]int?n)
{
Matrix?C(1n);
C.init_Matrix();
for(int?i=0;i for(int?j=0;j {
C.write(ijp[j]);
}
return?C;
}
//計算A矩陣個元素的函數
void?f(float?w[]float?x[]float?y[]float?sumf[][N]float?p[][N])
{
for(int?i=0;i for(int?j=0;j {
sumf[i][0]?=?sumf[i][0]+w[j]*1*p[j][i];
sumf[i][1]?=?sumf[i][1]?+?w[j]?*?x[j]?*?p[j][i];
sumf[i][2]?=?sumf[i][2]?+?w[j]?*?y[j]*?p[j][i];
sumf[i][3]?=?sumf[i][3]?+?w[j]?*?x[j]?*?x[j]*?p[j][i];
sumf[i][4]?=?sumf[i][4]?+?w[j]?*?x[j]?*?y[j]*?p[j][i];
sumf[i][5]?=?sumf[i][5]?+?w[j]?*?y[j]?*?y[j]*?p[j][i];
}
}
//移動最小二乘法的具體計算過程,參照論文“基于移動最小二乘法的曲線曲面擬合”,AB矩陣參照論文“移動最小二乘法的研究”
int?MLS_Calc(int?x_valint?y_valfloat?x[]float?y[]float?z[])
{
int?max_delta=max_x-min_x;//區域半徑
float?p[M][N]={0};
float?sumf[N][N]={0};
float?w[M]={0};
????for(int?j=0;j {
????????float?s=fabs((x[j]-x_val))/max_delta;
????????if(s<=0.5)
????????????w[j]=2/3.0-4*s*s+4*s*s*s;
????????else
{
????????????if(s<=1)
????????????????w[j]=4/3.0-4*s+4*s*s-4*s*s*s/3.0;
????????????else
????????????????w[j]=0;
}
p[j][0]=1;//每個采樣點計算基函數
p[j][1]=x[j];
p[j][2]=y[j];
p[j][3]=x[j]*x[j];
p[j][4]=x[j]*y[j];
p[j][5]=y[j]*y[j];
}
? f(wxysumfp);//計算得出A矩陣

float?p1[N];
Matrix?A=Trans_Matrix(sumfN);
Matrix?A_1=m_c.Matrix_copy(&A);
m_c.Matrix_inv(&A_1);//求A矩陣的逆A_1

Matrix?B(N1);//求矩陣B,N行M列
B.init_Matrix();
for(int?j=0;j {
p1[0]=1*w[j];
p1[1]=x[j]*w[j];
p1[2]=y[j]*w[j];
p1[3]=x[j]*x[j]*w[j];
p1[4]=x[j]*y[j]*w[j];
p1[5]=y[j]*y[j]*w[j];
Matrix?P=Trans_Matrix_One(p1N);//數組P1轉成1行N列的P矩陣
if(j==0)//第一列直接賦值
{
for(int?i=0;i B.write(i0p1[i]);
}
else
{
m_c.Matrix_trans(&P);//矩陣轉置,P轉為N行1列矩陣
m_c.Matrix_addCols(&B&P);//矩陣B列附加,形成N行M列矩陣
}
P.free_Matrix();
}

float?D[N]={1x_valy_valx_val*x_valx_val*y_valy_val*y_val};
Matrix?D1=Trans_Matrix_One(DN);//轉成1行N列矩陣

Matrix?D_A1_mul(1N);//定義矩陣并初始化相乘的結果矩陣,1行N列
D_A1_mul.init_Matrix();
if(m_c.Matrix_mul(&D1&A_1&D_A1_mul)==-1)
cout<<“矩陣有誤1!“;//1行N列矩陣乘以N行N列矩陣得到結果為1行N列

Matrix?D_A1_B_mul(1M);//定義矩陣并初始化相乘的結果矩陣,1行M列
D_A1_

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????6649??2017-05-02?14:21??MLS\MLS.cpp
?????文件?????????268??2017-05-03?22:02??MLS\代碼說明.txt

評論

共有 條評論

相關資源