《实验1-中点画线和Bresenham画线算法的实现》由会员分享,可在线阅读,更多相关《实验1-中点画线和Bresenham画线算法的实现(9页珍藏版)》请在人人文库网上搜索。

1、计算机图形学实验报告实验1 使用画线算法,绘制直线段姓名系别班级学号实验日期指导教师实验成绩杜艾莲地信1012011.10.10一 实验目的及要求(1)掌握图形学中常用的三种画线算法:数值微分法、中点画线法和Bresenham画线算法。(2)掌握绘制直线的程序设计方法。(3)掌握使用文件来保存直线段的方法。(4)掌握从文本文件中恢复出直线的方法。二 实验内容使用VC+ 6.0开发环境,分别实现中点画线算法和Bresenham画线算法,绘制直线(注意,不能使用VC中已有的绘制直线的函数),并以文本文件的形式保存绘制的结果,可以从文本文件中恢复出以前绘制过的直线。三 算法设计与分析输入P0(X0,。

2、Y0) 和P1(X1,Y1)计算初始值x,yd=x-2y,x=X0,y=Y0(x,y) 更新为(x+1,y+1),d更新为d+2x-2y(x,y)更新为(x+1,y),d更新为d-2y结束Bresenham算法绘制直线的程序(仅包含整数运算)。void MidBresenhamLine(int x0,int y0,int x1,int y1,int color)int dx,dy,d,UpIncre,DownIncre,x,y;if(x0x1)x=x1;x1=x0;x0=x;y=y1;y1=y0;y0=y;x=x0;y=y0;dx=x1-x0;dy=y1-y0;d=dx-2*dy;UpIncr。

3、e=2*dx-2*dy;DownIncre=-2*dy;while(x/ ifstream、ofstream等位于其中#include #include / string类型需要#include DlgInput.h/CDlgInput类的头文件usingnamespace std;#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = __FILE__;#endif/ CTestViewIMPLEMENT_DYNCREATE(CTestView, CView)BEGIN_MESSAGE_MAP(CTe。

4、stView, CView)/AFX_MSG_MAP(CTestView)ON_COMMAND(ID_MENUITEM32771, OnMenuitem32771)ON_COMMAND(ID_MENUBRESENHAMLINE, OnMenubresenhamline)ON_COMMAND(ID_MENUCLEARVIEW, OnMenuclearview)ON_COMMAND(ID_FILE_OPEN, OnFileOpen)ON_COMMAND(ID_FILE_SAVE, OnFileSave)/AFX_MSG_MAP/ Standard printing commandsON_COMMA。

5、ND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CTestView construction/destructionCTestView:CTestView()/ TODO: add construction code herem_nFlag = -1;/ 不是任何绘图类型CTestView:CTestView()BO。

6、OL CTestView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CTestView drawingvoid CTestView:OnDraw(CDC* pDC)CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data her。

7、eif(1=m_nFlag)/中点画线MidPointLine(m_X0, m_Y0, m_X1, m_Y1, RGB(255,0,0) );else if(2=m_nFlag)/ Bresenham画线BresenhamLine(m_X0, m_Y0, m_X1, m_Y1, RGB(0,255,0) );/ CTestView printingBOOL CTestView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CTestView:OnBegi。

8、nPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CTestView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CTestView diagnostics#ifdef _DEBUGvoid CTestView:AssertValid() constCView:AssertValid();void CTestView:Du。

9、mp(CDumpContext& dc) constCView:Dump(dc);CTestDoc* CTestView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CTestDoc);return (CTestDoc*)m_pDocument;#endif /_DEBUG/ CTestView message handlersvoid CTestView:OnMenuitem32771() / TODO: Add your command handler code h。

10、erem_nFlag = 1;/中点画线CDlgInputdlg;if(IDOK=dlg.DoModal()m_X0=dlg.m_nX0;m_Y0=dlg.m_nY0;m_X1=dlg.m_nX1;m_Y1=dlg.m_nY1;RedrawWindow();/重绘窗口void CTestView:OnMenubresenhamline() / TODO: Add your command handler code herem_nFlag = 2;/Bresenham画线CDlgInputdlg;if(IDOK=dlg.DoModal()m_X0=dlg.m_nX0;m_Y0=dlg.m_nY0。

11、;m_X1=dlg.m_nX1;m_Y1=dlg.m_nY1;RedrawWindow();/重绘窗口/ 算法:中点画线/ 输入:起点(x0,y0),终点(x1,y1);/输入要求x0=x0d=2*a+b; d0=2*a-b;d1=2*a; d2=2*(a+b); d3=2*b; d4=2*(a-b); d5=a-2*b;x=x0; y=y0;pDC-SetPixel(x,y,color);if(x=x1)/ 斜率k为无穷大if(ySetPixel(x,y,color);y+;elsewhile(y=y1)pDC-SetPixel(x,y,color);y-;/ if 斜率k为无穷大else/。

12、斜率k为有限值/double k=-a/b;/if( k+11e-6 & k-1SetPixel(x,y,color);elsewhile(xSetPixel(x,y,color);/ if( |k|1if(ySetPixel(x,y,color);elsewhile(xSetPixel(x,y,color);/ else( |k|1 )/ else 斜率k为有限值ReleaseDC(pDC);/ 算法:Bresenham画线/ 输入:起点(x0,y0),终点(x1,y1);/输入要求x0SetPixel(x,y,color);x+;e=e+2*dy;if(e0)y+;e=e-2*dx;voi。

13、d CTestView:OnMenuclearview() / TODO: Add your command handler code herem_X0=0;m_Y0=0;m_X1=0;m_Y1=0;RedrawWindow();/重绘窗口/ 打开过去保存的文件,该文件包含直线的端点坐标void CTestView:OnFileOpen()/ TODO: 在此添加命令处理程序代码if( m_nFlag!=1 & m_nFlag!=2 )MessageBox(请先在菜单中选择绘制直线的方法!,提示,MB_ICONWARNING);return;CFileDialogdlgFile (TRUE, 。

14、_T(txt), _T(),OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, _T(线段端点坐标文件(*.txt)|*.txt|), this);if( IDOK = dlgFile.DoModal()CStringfileName = dlgFile.GetFileName();ifstreamrFile;rFile.open(fileName,ios:in);if ( ! rFile.is_open() )MessageBox(文件打开失败!,提示,MB_ICONWARNING);return;CStringstrLine0;stringstrLine;intnX,。

15、nY;/ 起点、终点,两个坐标rFilestrLine;strLine0 = strLine.c_str();nX = atoi( strLine0.Left( strLine0.Find(,) ) );/ 解析文件,如“220,221”表示一个点的x、y坐标nY = atoi( strLine0.Mid( strLine0.Find(,)+1 ) );m_X0 = nX;m_Y0 = nY;rFilestrLine;strLine0 = strLine.c_str();nX = atoi( strLine0.Left( strLine0.Find(,) ) );nY = atoi( strL。

16、ine0.Mid( strLine0.Find(,)+1 ) );m_X1 = nX;m_Y1 = nY;RedrawWindow();rFile.close();/ 保存当前视图上绘制的所有直线的端点坐标void CTestView:OnFileSave()/ TODO: 在此添加命令处理程序代码CFileDialogdlgFile(FALSE, _T(txt), _T(), OFN_OVERWRITEPROMPT, _T(线段端点坐标文件(*.txt)|*.txt|), this);if( IDOK = dlgFile.DoModal()/ 保存文件CStringstrFileName =。

17、 dlgFile.GetFileName();/ 包含完整路径的文件名称ofstreamwFile;wFile.open(strFileName,ios:out|ios:ate|ios:app);if ( ! wFile.is_open() )MessageBox(strFileName+文件创建失败!,提示,MB_ICONWARNING);return;wFilem_X0,m_Y0endl;/ 将坐标对按行写到txt文件中wFilem_X1,m_Y1endl;/ 将坐标对按行写到txt文件中五 实验心得及建议实验心得:Bresenham算法是一种很方便很实用很简单的算法,它对任意斜率的直线段具有通用性。对于斜率为正且大于1的直线段,只需交换x和y之间的规则。对于负斜率,除了一个坐标递减而另一个坐标递增外,其余的程序是类似的。另外,水平、垂直和斜率的绝对值为1的直线可以直接装入帧缓冲储存器而无须进行画线算法处理。建议:这个程序还不是最简单的,还有改进的空间,希望能把程序变得更简洁些。

JAVA实现中点画线_实验1-中点画线和Bresenham画线算法的实现相关推荐

  1. 【计算机图形学】扫面转换算法(DDA算法 中点画线算法 Bresenham画线算法)

    模块1 扫描转换算法 一 实验目的 编写直线.弧线的光栅扫描转换算法,并对线宽与线形的算法加以探讨 用DDA算法.中点画线算法.Bresenham画线算法绘制直线(如果键盘输入数据,给出数据值:如果绘 ...

  2. openGL实现中点画线算法、DDA画线算法,Bresenham画线算法,并进行鼠标键盘的交互

    首先设置变量用于进行鼠标交互和键盘交互: int m = 0; GLdouble m1 =0, m2 = 0; 1.实验入口主函数: //主函数 int main(int argc, char** a ...

  3. 图形学--(中点画线法+Bresenham画线算法)

    编程环境:codeblocks+EGE库 用到的函数:putpixel(int x1,int y1,int color)  用某种颜色打亮一个坐标点. 这俩种算法都是用来在计算机上画一条直线的,那么我 ...

  4. java bresenham画直线_图形学笔记: Bresenham画线算法

    图形学课本, 按规矩介绍完矩阵行列式, 第一个算法肯定就是Bresenham画线算法了. 來我们來看看算法 Bresenham是用来画一些不反走样的线段的. 都说了线段肯定有起点和终点, 假设我们: ...

  5. Bresenham画线算法笔记

    目录 一.DDA算法和中点画线算法的回顾 二.Bresenham画线算法 一.DDA算法和中点画线算法的回顾 1.DDA算法(Digtal Differential Analyzer) 假设两个端点坐 ...

  6. Bresenham画线算法的推导

    转自:https://www.cnblogs.com/soroman/archive/2006/07/27/509602.html 以前看到Bresenham画线算法,直接拿来用,没有去推导它,近日, ...

  7. bresenham画线算法的最简洁实现

    bresenham画线算法的最简洁实现 具体的bresenham算法可以参考https://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.h ...

  8. java代码在jsp中怎么写_在jsp中写java代码

    该服务器上的所有的访问者的所有 jsp 页面 D.该服务器上的所有的访问者的所有 jsp 页面和 Java 程序 6.在 JSP 中调用 JavaBean 时不会用到的标记是( )...... jav ...

  9. java在W n8安装_在windows中安装JDK8并配置环境变量-java环境变量设置

    学习JAVA,必须得安装一下JDK(Java development kit java开发工具包),配置一下环境就可以学习JAVA了,下面是下载和安装JDK的教程: 一.去oracle官网上下载jdk ...

最新文章

  1. opencv简单滤波
  2. Springboot制作小网盘系统(小项目)
  3. 【全电发票】开票金额总额度发生了什么变化?
  4. C++设计模式之桥接模式
  5. JavaScript 节流函数 Throttle 详解
  6. 一个SAP成都研究院开发工程师的2020年度总结:未知生,焉知死
  7. C++函数声明和定义
  8. SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用
  9. python opencv 实现从一个文件夹中读取图片做切割处理后放入另一个文件夹
  10. 编码规范-html.md
  11. Mysql 数据库字符集转换及版本升级/降级的详细教程
  12. 190710每日一句
  13. 浅谈实时语音质量监控系统
  14. 汽车级485通信电路
  15. VScode代码美化工具Beautify
  16. Data Base学习记录:关系模型
  17. 基于C语言扫雷游戏的设计与实现
  18. 2017283418魏扬
  19. 导出 excel 表格(纯前端)和下载excel 文件
  20. 程序员如何边工作边创业?

热门文章

  1. 配置springmvc在其他类中(spring容器外)获取注入bean
  2. 杨元庆:兔子要变成狼靠的是体制的激励
  3. 企业架构研究总结(39)——TOGAF架构能力框架之架构委员会和架构合规性
  4. 转《两个个很形象的依赖注入的比喻》
  5. 是北京晚报!不,是中国最大的讽刺!!!
  6. django html数据库连接,Django数据库连接的问题
  7. 什么是区块链智能合约?
  8. java中next的用法_关于java iterator的next()方法的用法
  9. ui设计师要懂哪些B端设计原则?
  10. java培训:什么是抽象类?怎么定义?