C++课程设计报告Word格式.docx
- 文档编号:21253633
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:23
- 大小:293.05KB
C++课程设计报告Word格式.docx
《C++课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
#include<
iostream>
fstream>
#include<
iomanip>
Windows.h>
math.h>
usingnamespacestd;
structmyRGB{
shortR;
shortG;
shortB;
};
int_tmain(intargc,_TCHAR*argv[])
{
inta,b;
myRGBrgb[256];
ints[2];
HWNDmmm;
//获得句柄
HDChdc;
mmm=GetConsoleWindow();
hdc=GetDC(mmm);
ifstreammyfile;
ifstreammyfileo;
myfile.open("
1-clrTbl.txt"
);
myfile>
>
a>
b;
for(intj=0;
j<
a;
j++)
{
myfile>
rgb[j].R>
rgb[j].G>
rgb[j].B;
}
myfileo.open("
1-ImgData.txt"
myfileo>
s[0]>
s[1];
//cout<
<
s[0]<
该句用于先开始查看遥感图像像素点个数
short**my=newshort*[s[0]];
for(inti=0;
i<
s[0];
i++)
my[i]=newshort[s[1]];
short**my1=newshort*[s[0]];
my1[i]=newshort[s[1]];
i<
i++)
for(intj=0;
{
myfileo>
my[i][j];
//从文件中读取
}
j<
j++)
my1[i][j]=my[i][j];
i++)//打印原始图像
intt=my[i][j];
intr=rgb[t].R;
intg=rgb[t].G;
intb=rgb[t].B;
SetPixel(hdc,j,i,RGB(r,g,b));
for(inti=1;
s[0]-1;
i++)//用中值滤波器进行处理
for(intj=1;
s[1]-1;
shorta[9];
intk=0;
for(intii=i-1;
ii<
i+2;
++ii){
for(intjj=j-1;
jj<
j+2;
++jj)
{
a[k++]=my[ii][jj];
for(intm=0;
m<
5;
++m)
{
intmin=m;
for(intn=m+1;
n<
9;
++n)
if(a[n]<
a[min])
min=n;
inttemp=a[m];
a[m]=a[min];
a[min]=temp;
}
my1[i][j]=a[4];
}
}
i++)//打印图像
intt=my1[i][j];
SetPixel(hdc,j+330,i,RGB(r,g,b));
1;
i++)//用中值滤波器处理边缘
shorta[5];
for(intii=i;
3;
intr=a[2];
my1[i][0]=r;
for(intj=1;
j++)//用附近点进行边缘处理
my1[0][j]=my1[1][j];
my1[s[0]-1][j]=my1[s[0]-2][j];
for(inti=0;
{
for(intj=0;
intt=my1[i][j];
intr=rgb[t].R;
intg=rgb[t].G;
intb=rgb[t].B;
SetPixel(hdc,j,i+260,RGB(r,g,b));
}
ofstreamfile("
resImg.rs"
ios_base:
:
binary|ios_base:
out);
file.write(reinterpret_cast<
char*>
(&
my1),sizeof(my1));
//写入文件
ifstreamfile1;
file1.open("
in);
file1.read((char*)&
my1,sizeof(my1));
//for(inti=0;
20;
i++)//仅用20*20样本对比监测数据
//for(intj=0;
//cout<
my[j][i]<
"
;
i++)//释放内存
delete[]my[i];
delete[]my;
delete[]my1[i];
delete[]my1;
system("
pause"
return0;
实现功能及效果
实习题目二
样本点的多项式曲线拟合:
给定n个样本点(x,y),根据多项式曲线拟合公式,拟合出一条逼近的曲线函数。
(1)样本点的生成方法:
(sin()是余弦函数,rand()是随机函数)
y=sin(0.1*x)+noise;
其中,x=1~100,noise=rand(1~100)*0.3,noise是随机噪声。
(2)多项式曲线拟合公式:
y(x,w)=w0+w1*x1+w2*x2+…+wn*xn
(3)在程序输出窗口里绘制图形的函数:
DrawText(HDCdrawDevice,longX,longY,char*text);
//在(x,y)处绘字符
MoveTo(HDCdrawDevice,longX,longY);
//移动到某个点处
LineTo(HDCdrawDevice,longX,longY);
//画线到某个点处
(1)根据给定的条件,计算出带噪声的样本点集合,并将其输出到文本文件samp.txt中;
(2)通过线性方程组求解,计算出多项式曲线拟合的系数wi(1<
=i<
=n),并将其输出;
(3)将原始的样本点和求解的拟合曲线用不同的颜色绘制在窗口,进行显示对比;
并通过调整多项式的次数,观察何时会发生过度拟合现象。
这个是比较复杂的。
首先得到噪声点,再用最小二乘法得到拟合曲线,用textout绘制噪声点,用冒泡排序法法找到x值最小的噪声点,以此找到对应y值,开始用求得的拟合系数来增加x值获得y值连线得到拟合曲线。
再绘制一次不同系数观察对比。
(2)
实现过程:
(【感想】
可以看出来最后打出来的曲线相当漂亮,利用冒泡排序法找出最小值因而曲线最终这么漂亮,谢了五堂课程设计课,十分辛苦完成的,拟合感觉也非常好。
恩,我很满意的作品。
【附录】//fw1.cpp:
cstdlib>
stdlib.h>
time.h>
cmath>
voidsolve(intm,intnumber,float*x,float*y,float*p1)
inti,j,k;
float*w;
w=newfloat[m];
if(w!
=NULL){//利用最小二乘法求解
doublea[50][50]={0};
doublet;
for(i=0;
i<
=m;
for(j=0;
j<
for(k=0;
k<
number;
k++)
a[i][j]+=pow(x[k],i+j);
for(k=0;
a[i][j]+=y[k]*pow(x[k],i);
for(k=0;
=m-1;
for(i=k+1;
t=-a[i][k]/a[k][k];
for(j=k+1;
=m+1;
a[i][j]+=a[k][j]*t;
for(i=m;
i>
=0;
i--)
for(j=i+1;
a[i][m+1]-=a[i][j]*a[j][m+1];
a[i][m+1]/=a[i][i];
cout<
y="
a[0][m+1];
for(i=1;
if(a[i][m+1]>
0)
cout<
+"
cout<
a[i][m+1];
for(intj=0;
i;
*x"
}
m;
w[i]=a[i+1][m+1];
DeviceContextcontext;
HDChdc=context.GetCurDC();
HPENHPen=CreatePen(PS_SOLID,2,RGB(108,0,0));
SelectObject(hdc,HPen);
intz;
for(i=0;
number;
i++){
if(p1[0]==x[i])
z=y[i];
MoveToEx(hdc,p1[0]*5+100,768-(z*2+200),NULL);
//从x值最小的点开始绘图
for(intp=p1[0];
p<
100;
p++)
doubley=a[0][m+1];
for(intq=1;
q<
q++)
y+=a[q][m+1]*pow((float)p,q);
//TextOut(hdc,p+100,768-(y+100),"
**"
1);
LineTo(hdc,p*5+100,768-(y*2+200));
endl;
delete[]w;
DeleteObject;
else
cout<
error"
endl;
}
voidsolve1(intm,intnumber,float*x,float*y,float*p2)//绘制对比曲线
=NULL){
HPENHPen=CreatePen(PS_SOLID,2,RGB(0,105,105));
intz;
if(p2[0]==x[i])
MoveToEx(hdc,p2[0]*5+100,768-(z*2+200),NULL);
for(intp=p2[0];
for(;
){
intnumber,m;
请输入w最高次数"
cin>
m;
请输入点的个数"
srand((unsigned)time(NULL));
float*x,*y,*p1;
POINT*point;
x=newfloat[number];
y=newfloat[number];
p1=newfloat[number];
point=newPOINT[number];
if(x!
=NULL){//判断内存是否申请成功
if(y!
if(point!
for(inti=0;
x[i]=rand()%100;
p1[i]=x[i];
y[i]=100*sin(0.1*x[i])+(rand()%100)*0.3;
//随机数的产生
//cout<
x[i]<
y[i]<
for(intj=0;
number-1;
j++){//找出x值最小的点
for(inti=0;
if(p1[i]>
p1[i+1])
{
inttemp=p1[i+1];
p1[i+1]=p1[i];
p1[i]=temp;
}
for(inti=0;
point[i].x=x[i];
point[i].x=y[i];
ofstreamfile("
samp.text"
//记录带噪声的点的集合
file.write(reinterpret_cast<
point),sizeof(point));
DeviceContextdc;
HDChdc=dc.GetCurDC();
HPENHPen1=CreatePen(PS_SOLID,2,RGB(0,0,0));
SelectObject(hdc,HPen1);
MoveToEx(hdc,x[0]+100,768-(y[0]),NULL);
TextOut(hdc,x[i]*5+100,768-(y[i]*2+200),"
*"
2);
}
solve(m,number,x,y,p1);
delete[]x;
//释放内存
delete[]y;
DeleteObject;
//删除画笔
intm1;
cout<
cin>
m1;
srand((unsigned)time(NULL));
float*x1,*y1,*p2;
POINT*point1;
x1=newfloat[number];
y1=newfloat[number];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告
