《摄影技术基础》课程
实 验 报 告
(活页版封面)
姓 名
班 级
考核成绩
教师签名
计算机科学与工程学院信息传播系
实验五、感光度与曝光
姓名 班级 考核成绩
一、实验目的:
通过本实验让学生从感性认识上理解感光度与曝光的关系。让学生知道如何利用感光度与曝光的关系,适应不同光照条件来创作不同风格和不同效果的摄影艺术作品。同时让学生知道感光度的改变会影响曝光组合的使用。
二、实验器材:SONY数码相机(500万象素)。
指标:镜头,2.8-4; 4倍光学变焦(7-28)
光圈,可调范围f2.8-f8(梯级为2.8,3.2,3.5,4,4.5,5.0,5.6,6.3,7.1, 8)
快门,可调范围1/1000s-nr30秒(梯级为1/1000,1/800,1/640,1/500,1/400,1/320,1/250,1/200,1/160,1/125,1/100,1/80,1/60,1/50,1/40,1/30,1/20,1/10,1/8,…nr30秒)
模拟感光度,ASA100,ASA200,ASA400,ASA800
三、实验方法和技术路线:
1.模拟常用感光度的摄影(ASA100,21DIN)
使用高速快门1/125秒以上、快门速度优先AE模式。
推荐使用中长焦镜头(14毫米左右)
被摄体: 人物肖像(室外光)。
光线:顺光或侧逆光(选择少云天)
要求:只把焦点对在主要被摄体上,使主体前后一定范围内清晰可见。
2.模拟高速感光度的摄影(ASA400,)
使用高速快门1/125秒以上、快门速度优先AE模式。
推荐使用中长焦镜头(14毫米左右)
被摄体: 车库中的,人物肖像。
光线:顺光或侧逆光(选择四周可通过白墙反光的小房间)
要求:只把焦点对在主要被摄体上,使主体前后一定范围内清晰可见。
四、实验分组:每组3人,提供一架数码相机。三组共用一个三角架。
五、实验报告:
每人都必须提交用自己名字命名的文件夹,其中包含:一份“实验三、感光度与曝光”所示样式的WORD文件和至少4幅数码照片文件。并将拍摄参数说明填入下表,
实验三,拍摄参数说明表
六、实验评语:
第二篇:实验报告3-5
实验三 源程序
1.变步长梯形法程序代码
double f(double x)
{
if(x==0) return 1;
return sin(x)/x;
}
//变步长复化梯形公式
void bianbuchang::OnButton1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_a==0&&m_b==0)
{
MessageBox("请输入积分上下线!");
return;
}
if(m_e==0)
{
MessageBox("请输入精度!");
return;
}
//迭代初值
long n = 1;
double h = m_b-m_a; //步长
double temp = h*(f(m_a) + f(m_b))/2.0, t;
double p = m_e + 1.0;//精度控制
double sum, x;
while (p >= m_e)
{
sum = 0.0;
for (long k=0; k<n; k++)
{
x = m_a + (k+0.5)*h;
sum = sum + f(x);
}
t = (temp + h*sum)/2.0; //key step
p = fabs(t-temp);
temp = t;
n = n+n;
h = h/2.0;
}
m_n.Format("%d",n);
m_result.Format("%lf",t);
UpdateData(FALSE);
}
2.龙贝格程序代码
double f1(double x)
{
if(x==0) return 1;
return sin(x)/x;
}
//变步长复化梯形公式
double computerAutoT(double aa, double bb,int n,double &temp)
{
//迭代初值
double h = (bb-aa)/n,t; //步长
double sum, x,Sn;
sum = 0.0;
for (long k=0; k<n; k++)
{
x = aa + (k+0.5)*h;
sum = sum + f1(x);
}
t = (temp + h*sum)/2.0; //key step
Sn=4/3*t-1/3*temp;
temp = t;
return (Sn);
}
void Romberge::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
if(m_a==0&&m_b==0)
{
MessageBox("请输入积分上下线!");
return;
}
if(m_e==0)
{
MessageBox("请输入精度!");
return;
}
double Sn,S2n,S4n,S8n,Cn,C2n,C4n,Rn,R2n,p=m_e+1;
double temp = (m_b-m_a)*(f1(m_a) + f1(m_b))/2.0;
int n=1;
Sn=computerAutoT(m_a,m_b,n,temp);
while(p>=m_e)
{
n=n+n;
S2n=computerAutoT(m_a,m_b,n,temp);
Cn=16/15*S2n-1/15*Sn;
n=n+n;
S4n=computerAutoT(m_a,m_b,n,temp);
C2n=16/15*S4n-1/15*S2n;
Rn=64/63*C2n-1/63*Cn;
n=n+n;
S8n=computerAutoT(m_a,m_b,n,temp);
C4n=16/15*S8n-1/15*S4n;
R2n=64/63*C4n-1/63*C2n;
p=fabs(R2n-Rn);
Sn=S2n;
}
m_n.Format("%d",n);
m_result.Format("%lf",R2n);
UpdateData(FALSE);
}
实验四 源程序
1.改进欧拉法程序代码
double f2(double x,double y)
{
return (-x*y*y);
}
double Euler(double &x,double y,double h)
{
double Yk;
Yk=y+h/2*(f2(x,y)+f2(x+h,y+h*f2(x,y)));
x=x+h;
y=Yk;
return y;
}
void GJEuler::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
if(m_a==0&&m_b==0)
{
MessageBox("请输入x取值上下限!");
return;
}
if(m_h==0)
{
MessageBox("请输入步长!");
return;
}
if(m_y0==0)
MessageBox("请确认y的初值是否为0!");
double y[100],a=m_a;
y[0]=m_y0;
char buffer[7];
for(int i=0;i<(m_b-m_a)/m_h;i++)
{
y[i+1]=Euler(a,y[i],m_h);
gcvt(i,7,buffer);
m_Euler.InsertItem(i,buffer);
gcvt(a,7,buffer);
m_Euler.SetItemText(i,1,buffer);
gcvt(y[i+1],7,buffer);
m_Euler.SetItemText(i,2,buffer);
}
m_Euler.SetRedraw(TRUE);
m_result.Format("%lf",y[i]);
UpdateData(FALSE);
}
BOOL GJEuler::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_Euler.InsertColumn(0,"K");
m_Euler.InsertColumn(1,"Xi");
m_Euler.InsertColumn(2,"Yi");
RECT rect;
m_Euler.GetWindowRect(&rect);
int wid=rect.right-rect.left;
m_Euler.SetColumnWidth(0,wid/3);
m_Euler.SetColumnWidth(1,wid/3);
m_Euler.SetColumnWidth(2,wid/3);
m_Euler.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_Euler.SetRedraw(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
2.四阶龙格-库塔法程序代码
double f3(double x,double y)
{
return (-x*y*y);
}
double Runge_Kutta1(double x,double y,double h)
{
double k1,k2,k3,k4;
k1=f3(x,y);
k2=f3(x+0.5*h,y+0.5*h*k1);
k3=f3(x+0.5*h,y+0.5*h*k2);
k4=f3(x+h,y+h*k3);
y=y+h/6*(k1+2*k2+2*k3+k4);
return(y);
}
void Runge_Kutta::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
if(m_x0==0&&m_xn==0)
{
MessageBox("请输入x取值上下限!");
return;
}
if(m_h==0)
{
MessageBox("请输入步长!");
return;
}
if(m_y0==0)
MessageBox("请确认y的初值是否为0!");
double x=m_x0,y[100];
y[0]=m_y0;
char buffer[7];
for(int i=0;fabs(x-m_xn)>=1e-12;i++,x=x+m_h)
{
y[i+1]=Runge_Kutta1(x,y[i],m_h);
gcvt(i,7,buffer);
m_Runge.InsertItem(i,buffer);
gcvt(x+m_h,7,buffer);
m_Runge.SetItemText(i,1,buffer);
gcvt(y[i+1],7,buffer);
m_Runge.SetItemText(i,2,buffer);
}
m_Runge.SetRedraw(TRUE);
m_result.Format("%lf",y[i]);
UpdateData(FALSE);
}
初始化函数中的列表控件的操作同改进欧拉法
实验五 源程序
1.高斯—塞德尔迭代法程序代码
数据读入同实验一中的高斯列主消元法
double abc (double a[][10],double x[],int i,int m)
{
double s=0;
int j;
for(j=0;j<m;j++)
{
if(i==j)
continue;
s+=a[i][j]*x[j];
}
return (s);
}
//G-S迭代
for(k1=1;k1<=100;k1++)
{
double e=0.0;
for(i=0;i<m_m;i++)
{
t=x0[i];
x0[i]=(b[i]-abc (a,x0,i,m_m))/a[i][i];
if(fabs((x0[i]-t)>e))
e=fabs(x0[i]-t);
}
if(e<m_E)
break;
}
//计算结果输出
char buffer[50];
char string[100];
char min[10][15];
for(j=0;j<m_m;j++)
{
gcvt(x0[j],7,buffer);
strcpy(min[j],buffer);
}
k=0;
for(i=0;i<m_m;i++)
{
for(j=0;j<14&&min[i][j]!='\0';j++)
{
string[k]=min[i][j];
k++;
}
string[k]=' ';
k++;
string[k]=' ';
k++;
}
string[k]='\0';
m_k.Format("%d",k1);
m_result.Format("%s",string);
UpdateData(FALSE);
}
2.牛顿迭代法程序代码
void Five_Newton::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
if(m_E==0)
{
AfxMessageBox("请输入精度!");
return;
}
if(m_x0==0)
AfxMessageBox("请确认初值是否为0!");
double xk1,xk0,x;
xk0 = m_x0;
for (int k=0; k<100; k++)
{
xk1 = xk0 - f(xk0)/g(xk0);
if (fabs(xk1-xk0) < m_E&& fabs(f(xk1)) < m_E)
{
x = xk1;
break;
}
else
xk0 = xk1;
}
m_result.Format("%lf",x);
m_n.Format("%d",k);
UpdateData(FALSE);
}
运行结果
下图分别为
1. 进入界面的主对话框
2. 变步长梯形法的对话框
3. Romberge对话框
4. 改进欧拉法对话框
5. 四阶Romge-Kutta对话框
6. 高斯-塞德尔对话框
7. 牛顿迭代法对话框