资源简介
呵呵 我和同学一起做的~
代码片段和文件信息
#include
#include
#include
#define A 0.5236 //设定theta角度为30度
#define D 0.005 //每个小格的边长
#define PI 3.1415926
class Ellipse
{
int number;
float centerX;
float centerY;
float longaxes;
float shortaxes;
int angle;
float coefficient; // 定义椭圆的中心、长轴、短轴、角度、折射系数
public:
int Getnumber() { return number;}
float GetcenterX() { return centerX;}
float GetcenterY() { return centerY;}
float Getshortaxes() { return shortaxes;}
float Getlongaxes() { return longaxes;}
int Getangle() { return angle*PI/180;}
float Getcoefficient() { return coefficient;}
void GetProjection(float *pB);
Ellipse(int Numberfloat CenterXfloat CenterY float Longaxesfloat Shortaxesint Anglefloat Coefficient)
{
number=NumbercenterX=CenterXcenterY=CenterYlongaxes=Longaxes
shortaxes=Shortaxesangle=Anglecoefficient=Coefficient;
} //定义一个椭圆的构造函数
};
void Ellipse::GetProjection(float *pB) //调用构造函数
{ int e=400; //图像大小
float pi2RhC1; //采样的角度
float *jj=new float[400]; //分配卷积结果值空间
float N= Getnumber();
float X=GetcenterX(); //得到中心的X坐标
float Y=GetcenterY(); //得到中心的Y坐标
float BB=Getshortaxes(); //得到短轴
float AA=Getlongaxes(); //得到长轴
float AG=Getangle(); //得到旋转角度
float C=Getcoefficient(); //得到折射系数
float*ft=new float[400]; //分配投影函数数值空间
for(int k=0;k<=e;k++) //获得投影函数值
{
float gt=2*C*AA*BB*fabs(pow(AA2)*pow(cos(A-AG)2)
+pow(BB2)*pow(sin(A-AG)2)-pow((k-X*cos(A)-Y*
sin(A))2))/pow(AA2)*pow(cos(A-AG)2)+pow(BB2)*
pow(sin(A-AG)2);
ft[k]=gt;
}
pi2= pow(PI2); //求PI的平方
for(int i=0j=-200;j<=200;i++j++) //卷积函数的分类离散形式与投影值相乘
{
if(j%2==0) jj[i]=0;
else if(j==0) jj[i]=10000*ft[i]; //计算1/(4*D*D)得10000
else jj[i]=-1/(j*j*PI*PI*D*D)*ft[i];
}
for(int n=0;n<400;n++) //反投影过程得像素值
{
for(int j=0;j<400;j++)
{
C1=e/2-(e-1)*(cos(A)+sin(A))/2;//定义C1为此值
Rh=n*D*cos(A)+j*D*sin(A)+C1*D; //R轴上的垂足坐标
int I=Rh;//求Rh的整数部分
float F=Rh-I;//得出小数部分
float X1Y1TPQ;
X1=(n+1-(e+1)/2)*D-X; //新坐标的大小
Y1=(j+1-(e+1)/2)*D-Y;
P=AA*AA; Q=BB*BB;
T=pow(X12)/P+pow(Y12)/Q;
if(T>1) pB[n+j*e]=0; //判断坐标是否在椭圆内,不在时像素值归零
else pB[n+j*e]=(1-F)*jj[I]+F*jj[I+1];//坐标在椭圆的像素值大小
}
}
}
void main() //主函数
{
float *pB=new float[160000]; //保存反投影数据
float *pC=new float[160000];
for(int i=0;i<160000;i++)
{
pC[i]=0;
}
Ellipse Ellipse1(1000.920.69902);
Ellipse Ellipse2(20-0.01840.8740.662490-0.98);
Ellipse Ellipse3(300.220.310.1172-0.02);
Ellipse Ellipse4(40-0.220.410
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1214814 2007-12-19 19:52 图象.bmp
文件 119 2007-12-19 19:58 说明.txt
文件 5056 2007-12-19 19:56 卷积.cpp
目录 0 2007-06-06 13:31 绘图
文件 27004 2005-11-24 11:32 绘图\11.aps
文件 1701 2005-11-24 11:46 绘图\11.clw
文件 4165 2004-09-21 19:56 绘图\11.cpp
文件 4471 2004-09-21 19:56 绘图\11.dsp
文件 527 2004-09-21 19:56 绘图\11.dsw
文件 1322 2004-09-21 19:56 绘图\11.h
文件 91136 2005-11-24 11:46 绘图\11.ncb
文件 53760 2005-11-24 11:46 绘图\11.opt
文件 238 2004-09-21 19:56 绘图\11.plg
文件 10160 2004-09-21 19:56 绘图\11.rc
文件 1772 2004-09-21 19:56 绘图\11Doc.cpp
文件 1445 2004-09-21 19:56 绘图\11Doc.h
文件 2719 2004-09-21 19:56 绘图\11View.cpp
文件 1853 2004-09-21 19:56 绘图\11View.h
目录 0 2007-12-19 19:57 绘图\Debug
文件 597153 2007-12-19 19:57 绘图\Debug\1.txt
文件 118823 2004-09-21 19:56 绘图\Debug\11.exe
文件 315928 2004-09-21 19:56 绘图\Debug\11.ilk
文件 22672 2004-09-21 19:56 绘图\Debug\11.obj
文件 5495540 2004-09-21 19:56 绘图\Debug\11.pch
文件 336896 2004-09-21 19:56 绘图\Debug\11.pdb
文件 5852 2004-09-21 19:56 绘图\Debug\11.res
文件 14515 2004-09-21 19:56 绘图\Debug\11Doc.obj
文件 20205 2004-09-21 19:56 绘图\Debug\11View.obj
文件 22873 2004-09-21 19:56 绘图\Debug\MainFrm.obj
文件 105373 2004-09-21 19:56 绘图\Debug\StdAfx.obj
............此处省略16个文件信息
评论
共有 条评论