实验一 基本图形生成算法
1.实验目的:
掌握中点 Bresenham绘制直线的原理 设计中点 Bresenham算法 编程实现中点 Bresenham算法 2.实验描述:
使用中点Bresenham算法绘制斜率为0≤k≤1的直线。 3.算法设计:
直线中点Bresenham算法
1. 输入直线的起点坐标 P0(x0,y0)和终点坐标P1(x1,y1) 。
2. 定义直线当前点坐标 x,y、定义中点偏差判别式d、定义直线斜率k、定义像素点颜色
rgb。
3. x=x0,y=y0,计算d=0.5-k,k=(y1-y0)/(x1-x0),rgb=RGB(0,0,255)。 4. 绘制点(x,y),判断d的符号。若d<0,则(x,y)更新为(x+1,y+1),d 更新为
d+1-k;否则(x,y)更新为(x+1,y),d更新为d-k。 5. 如果当前点x 小于x1,重复步骤4,否则结束。
4.源程序:
1)// TestView.h
#include \"InputDlg.h\"//对话框头文件 class CTestView : public CView { ….. }
2)// TestView.cpp
void CTestView::OnMbline()//菜单函数 {
InputDlg dlg; if(dlg.DoModal()==IDOK) { AfxGetMainWnd()->SetWindowText(\":直线中点Bresenham算法\"); RedrawWindow(); Mbline(dlg.m_x0, dlg.m_y0, dlg.m_x1, dlg.m_y1); } }
void CTestView::Mbline(double x0, double y0,double x1,double y1) //直线中点Bresenham函数 { CClientDC dc(this);
COLORREF rgb=RGB(255,0,0); //定义直线颜色为红色 double x,y,d,k;
x=x0;y=y0;k=(y1-y0)/(x1-x0);d=0.5-k; for(x=x0;x<=x1;x++) {
dc.SetPixel(ROUND(x),ROUND(y),rgb);
if(d<0) {
y++; d+=1-k;
} else
d-=k; }
}
5.运行结果:(屏幕截图)
序号 1 2 3 4 检查项目 算法设计(40%) 算法的程序实现(40%) 运行结果(10%) 实验报告规范性 (10%) 分值 0-40 0-40 0-10 0-10 提交时间 得分 成 绩