当前位置首页 > 建筑/施工 > 施工组织
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

图形学实验三--线画图元生成算法实验

文档格式:PDF| 8 页|大小 489.70KB|积分 10|2022-12-26 发布|文档ID:177580266
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 8
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!图形学实验三-线画图元生成算法实验-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!2 计算机图形学实验报告 线画图元生成算法实验 姓名 闫学森 学号 87 专业 计算机科学与技术 班级 三班 天津大学计算机科学与技术学院 2015 年 12 月 5 日 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!3 一、实验目的(1)实现 DDA 直线生成算法(2)实现 Bresenham 直线生成算法(3)实现中点画圆算法 二、实验内容(1)自定义直线段起始点和终点坐标;(2)采用不同的彩色显示两种算法生成的直线结果;三、实验结果 四、实验分析和总结 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!4 此实验是图形学的第一个算法,按照书上的步骤一步一步的实现也有难度DDA 算法比较简单,向上取整即可。

    Bresenham 比较复杂,变量较多两个算法有几个方面需要注意:1.斜率大于一,x,y 坐标互换;2.斜率为负时,起始点与终止点坐标互换五、源代码 void DrawCir(int a,int b,int x3,int y3,CDC*pDC)/画圆的对称点 CPen myPen1;(PS_SOLID,1,RGB(0,255,0);CPen*pOldPen=pDC-SelectObject(&myPen1);/设置点的颜色 int x,y;/所画点的坐标/对称的八个点 x=a+x3;/第一象限 y=b+y3;for(int i=0;i MoveTo(100+x*3+i,100+y*3);pDC-LineTo(100+x*3+i,100+y*3+3);for(int i=0;i MoveTo(100+y*3+i,100+x*3);pDC-LineTo(100+y*3+i,100+x*3+3);x=-a+x3;/第三象限 y=-b+y3;for(int i=0;i MoveTo(100+x*3+i,100+y*3);pDC-LineTo(100+x*3+i,100+y*3+3);for(int i=0;i MoveTo(100+y*3+i,100+x*3);pDC-LineTo(100+y*3+i,100+x*3+3);x=-a+x3;/第二象限 y=b+y3;for(int i=0;i MoveTo(100+x*3+i,100+y*3);pDC-LineTo(100+x*3+i,100+y*3+3);for(int i=0;i MoveTo(100+y*3+i,100+x*3);pDC-LineTo(100+y*3+i,100+x*3+3);欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!5 x=a+x3;/第四象限 y=-b+y3;for(int i=0;i MoveTo(100+x*3+i,100+y*3);pDC-LineTo(100+x*3+i,100+y*3+3);for(int i=0;i MoveTo(100+y*3+i,100+x*3);pDC-LineTo(100+y*3+i,100+x*3+3);void Ctest21lineView:OnDraw(CDC*pDC)Ctest21lineDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);CPen myPen1;(PS_SOLID,1,RGB(0,0,0);CPen*pOldPen=pDC-SelectObject(&myPen1);for(int x=100;x MoveTo(x,100);pDC-LineTo(x,700);for(int y=100;y MoveTo(100,y);pDC-LineTo(700,y);int x0=12,y0=14,x1=40,y1=54,x2=80,y2=54;/设置起始点终止点 if(x1 SelectObject(&myPen1);/设置DDA点的颜色 double m1=(double)(y1-y0)/(double)(x1-x0);int x=x0,y=y0;/所画点的坐标 double yi,xi;yi=y0;/DDA算法 xi=x0;if(m1 1)/斜率小于1 for(int j=0;x=x1;+j)for(int i=0;i MoveTo(100+x*3+i,100+y*3);pDC-LineTo(100+x*3+i,100+y*3+3);y=yi+m1+;/算下一个点的坐标 x=x+1;yi=yi+m1;else/斜率大于1,对称 for(int j=0;y=y1;+j)for(int i=0;i MoveTo(100+x*3+i,100+y*3);pDC-LineTo(100+x*3+i,100+y*3+3);x=xi+1/m1+;y=y+1;xi=xi+1/m1;();(PS_SOLID,1,RGB(0,0,255);pOldPen=pDC-SelectObject(&myPen1);/Bresenham算法点颜色 yi=y0;xi=x0;/画第一个点 x=x0;y=y0;欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!7 for(int i=0;i MoveTo(100+x0*3+i,100+y0*3);pDC-LineTo(100+x0*3+i,100+y0*3+3);int a=x2-x0,b=y2-y0;if(double)b/(double)a 1)/Bresenham算法 int c=2*b,d=c-2*a;int p=c-a;for(int i=0;i 0)+y;+x;for(int i=0;i MoveTo(100+x*3+i,100+y*3);pDC-LineTo(100+x*3+i,100+y*3+3);if(y-yi=1)p=p+d;else p=p+c;yi=y;else int c=2*a,d=c-2*b;int p=c-b;for(int i=0;i 0)+x;+y;if(x-xi 0)p=p+d;else p=p+c;xi=x;欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!8 int x3=30,y3=30,r=15;/中点画圆 double p=5/-r;x=0,y=r;yi=y;while(x=0)-y;+x;if(y=yi)p=p+2*x+1;else p=p+2*x+1-2*y;yi=y;。

    点击阅读更多内容
    卖家[上传人]:痛苦女王
    资质:实名认证