c语言 绘制任意斜率的直线,绘制任意斜率的直线

《绘制任意斜率的直线》由会员分享,可在线阅读,更多相关《绘制任意斜率的直线(15页珍藏版)》请在人人文库网上搜索。

1、淮海工学院计算机工程学院 实验报告书 课程名: 计算机图形学 题 目: 绘制任意斜率的直线 班 级: 测绘121 学 号: 2012122827 姓 名: 王其芳 评语: 成绩: 指导教师: 批阅时间: 年 月 日 一、实验目的或要求 1. 掌握任意斜率直线的绘制算法。 2. 掌握直线中点Bresenham算法的基本原理,能够用VC+实现该算法。 二、 实验内容 掌握直线段的生成算法,并用C+实现算法,包括中点法生成 、1直线。 2、编程实现DDA算法、Bresenham算法、中点画线法绘制直线段 实验代码 三、 算法DDA1、生成直线的算法思想:一个坐标轴上以单位间隔增量,决定另一个坐标轴上。

2、最靠近线段路径的对应整数值。假定x2x1的绝对值大于y2y1的绝对值,取x为一个象素单位长,即x 每次递增一个象素,然后利用下式计算相应的y值:yk+1ykyykmx 对于|m|1的线段,可通过计算由Y方向的增量y引起的改变来生成直线: xk+1xkxxkmy 生成直线的DDA算法思想是源用初中直线的方程得出来的,而生成直线的中点算法是通过将DDA算法的方程式改为隐函数形式,然后通过与中点的比较确定该取的像素,绘制图线。 /* DDA */ #include void linedda(int x0,int y0,int x1,int y1,int color) int x,dy,dx,y; f。

3、loat m; dx=x1-x0; dy=y1-y0; m=dy/dx; y=y0; for(x=x0;x #include / 四舍五入 int Round(float x) return (int)(x abs(y2 - y1) ? abs(x2 - x1) : abs(y2 - y1); x = (float)x1; y = (float)y1; cx = (float)(x2 - x1) / steps; cy = (float)(y2 - y1) / steps; for(int i = 0; i #include / 使用 Bresenham 算法画任意斜率的直线(包括起始点,不包。

4、括终止点) void Line_Bresenham(int x1, int y1, int x2, int y2, int color) int x = x1; int y = y1; int dx = abs(x2 - x1); int dy = abs(y2 - y1); int s1 = x2 x1 ? 1 : -1; int s2 = y2 y1 ? 1 : -1; bool interchange = false; / 默认不互换 dx、 dy if (dy dx) / 当斜率大于 1 时,dx 、dy 互换 int temp = dx; dx = dy; dy = temp; in。

5、terchange = true; int p = 2 * dy - dx; for(int i = 0; i = 0) if (!interchange) / 当斜率 1 时,选取左右象素点 x += s1; p -= 2 * dx; if (!interchange) x 为步长时,选取当斜率 x += s1; / 1 时,选取 y 为步长 p += 2 * dy; / 主函数 void main() initgraph(640, 480); / 测试画线 Line_Bresenham(10, 100, 100, 478,BLUE); Line_Bresenham(10, 478, 638。

6、, 1, RED); / 按任意键退出 getch(); 运行结果如下: 、生成直线的中点算法3 算法思想:根据递推关系来判断利用已知或以求出的点,中点算法主要是利用椭圆的正负划分性, 下一个点的位置。转化为可加的数,m浮点运算效率低下的问题,将直线的斜率中点算法有效地消除了DDA使之成为被图形软件这样使得中点算法的效率大大提高,然后通过中点来确定要选择的点, 广泛采用的算法之一。 代码如下: #include #include / 使用中点算法画任意斜率的直线(包括起始点,不包括终止点)void Line_Midpoint(int x1, int y1, int x2, int y2, in。

7、t color) int x = x1, y = y1; int a = y1 - y2, b = x2 - x1; int cx = (b = 0 ? 1 : (b = -b, -1); int cy = (a 1 d = 2 * b + a; d1 = 2 * b; d2 = 2 * (a + b); while(y != y2) if(d 0) d += d1; else x += cx, d += d2; y += cy; putpixel(x, y, color); / 主函数 void main() initgraph(640, 480); / 测试画线 Line_Midpoint。

8、(100, 50, 100, 478, GREEN); Line_Midpoint(1, 478, 638, 1, BLUE); / 按任意键退出 getch(); 四、实验结果 1、 该程序实现了三种算法的直线段绘制 2、 比较三种算法的结果: 像素逼近效果由好到差依次为:Bresenham算法、DDA算法、中点算法 执行速度由快到慢依次为: 中点算法、DDA算法、Bresenham算法 五、实验分析与体会 通过此次实验我对计算机图形学有了实际的认识,计算机图形学对我们的生活有很多的益处。学习之后我知道了计算机图形学是研究怎样利用计算机来显示,生成和处理图形的原理,方法和技术的一门学科。虽然一开始有些许不懂和茫然,但是经过老师的指导,我还是完成了这次的实验。 (注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值