在数学上,理想的直线是没有宽度的,它是由无数个点构成的集合。对直线进行光栅化时,只能在显示器所给定的有限个像素组成的矩阵中,确定最佳逼近该直线的一组像素,并且按扫描线排序。

中点画线法:通过观察发现,画直线段的过程中,当前像素点为(Xp,Yp),下一个像素点有两种可选择点P1(Xp+1,Yp)或P2(Xp+1,Yp+1)。若M=(Xp+1,Yp+0.5)为P1与P2的中点,Q为理想直线与X=Xp+1垂线的交点,当M在Q的下方时,P2应为下一个像素点,当M在Q的上方时,应取P1为下一点。

运行结果:

实现过程使用MFC实现的。

实现方法:

其中(x0,y0)为起始点,(x1,y1)为终点,color为颜色值。

void CDrawView::MiddleDrawline(int x0,int y0,int x1,int y1,int color)
{//中点划线算法//d>0 中点在直线上方 d<0 中点在直线下方CClientDC dc(this);int a,b,d1,d2,d,x,y;a=y0-y1; b=x1-x0; d=2*a+b; //二倍避免了浮点数的运算d1=2*a; //中点在上面的增量d2=2*(a+b);//中点在下面的增量x=x0; y=y0; dc.SetPixel(x,y,color);while(x<x1){ if(d>0)  //中点在上面 取下面的像素d+=d1;else  //取上面的像素{d+=d2;y++;}x++;dc.SetPixel(x,y,color); //绘制像素 }
} 

光栅图形学-中点画线法相关推荐

  1. 图形学---中点画线法---opengl中实现

    目的: 为了优化DDA算法中的浮点数运算(DDA中每次+k运算,|k|<1,所以存在浮点数运算),达到整数运算,提高效率. 基本思想: 当前像素点为(xp,yp),下一像素点为P1或P2.设P1 ...

  2. [计算机图形学算法]直线扫描转换算法-中点画线法

    DDA算法用斜截式表示直线方程,简化了乘法运算,但任存在浮点运算. 我们猜想,用别的方式表示直线,是否能把浮点运算也简化为整数运算. 在中点画线法中,我们用Ax+By+C=0的一般式方程来表示直线,即 ...

  3. 【计算机图形学】中点画线法实现任意斜率直线的绘制

    [计算机图形学]中点画线法实现任意斜率直线的绘制 一.中点画线法原理简介 1.建立基础 中点画线法的建立基础是数值微分画线法(DDA),其作为改进算法,沿用了DDA算法的增量思想,针对影响DDA算法效 ...

  4. 【计算机图形学】中点画线法实现焦点在x、y轴上的椭圆绘制

    [计算机图形学]中点画线法实现焦点在x.y轴上的椭圆绘制 一.中点画线法原理简介 1.建立基础 中点画线法的原理介绍见直线绘制的博文中点画线法实现任意斜率直线的绘制.基本思路是以下一点在椭圆外/内的位 ...

  5. 【计算机图形学|直线生成算法】中点画线法

    文章目录 概述 一.基本思想 二.构造判别式: 三.递推出增量 优化: 总结: 四.例题分析 五.伪代码 概述 中点画线法(Midpoint Line Algorithm)是一种画线(Line Dra ...

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

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

  7. 中点画线法c语言程序,计算机图形学 :中点画圆法

    由于安装了easyx的vc6.0只能用initgraph(x,y)初始化一个x*y的第一象限的画板.所以对于书上的画圆法我们需要稍微进行一点改变.这个算法只能画1/8的圆,其它7/8的圆只能通过对称关 ...

  8. 画毛毛虫代码计算机图形学,计算机图形学 实验 数值微分(DDA)法、中点画线法、Bresenham算法.doc...

    文档介绍: 实验名称数值微分(DDA)法.中点画线法.Bresenham算法实验时间年月日专业姓名学号预****操作座位号教师签名总评一.实验目的:1.了解数值微分(DDA)法.中点画线法.Brese ...

  9. 【OpenGL C++】画一个空心汉字和一个圆,并填充汉字(中点画线法,中点画圆法,种子填充法)

    内容:画一个空心汉字和一个圆 设计一个画任意直线和圆的算法,可选所学的任一图形扫描转换算法(中点或bresenham算法),不能使用任何画线/画圆的API: 使用画线算法实现空心汉字的绘制,汉字必须为 ...

  10. java实现计算机图形学中点画线算法

    代码:DrawLine.java: import javax.swing.*; import java.awt.*;public class DrawLine extends JPanel {publ ...

最新文章

  1. IEEE史上首位华人主席!马里兰大学终身教授刘国瑞当选
  2. python进制表示方法_python 16进制表示什么
  3. 方法的绑定机制-静态绑定和动态绑定
  4. ad网络标号设置经验_PLC模拟量通道设置的平均次数是什么意思?如何确定?
  5. HTML判断如果并且,将html转换为js,并且其中含有判断语句
  6. clr错误 8004005程序将立即终止_微软公开发布更多Surface驱动程序 固件支持终止日期...
  7. python基础:集合(set)
  8. Env:Cscope安装与配置
  9. python调用bing翻译API V2
  10. Firefox扩展推荐
  11. VB连接数据库SQL sever
  12. 回顾丨2021年声纹识别研究与应用学术研讨会
  13. 【项目实战】Python基于孤立森林算法(IsolationForest)实现数据异常值检测项目实战
  14. 如何用matlab生成一个单位正交矩阵?
  15. zzuli oj 2532: 婷婷是土豪 DFS深搜
  16. 怎样成为解决问题的高手?七步成诗:麦肯锡解决问题七步法
  17. 什么是网络变压器共模抑制比?120dB与60dB的共模抑制比区别大吗?
  18. 云队友丨王兴的无限游戏:很多人误认为干掉对手,就胜利结束
  19. 微信小程序(下拉刷新数据)新手向
  20. 熟吃西红柿更保护心脏

热门文章

  1. android的 root权限
  2. JVM调优工具的使用方法
  3. SQL Server 索引优化——重复索引(部分重复)
  4. \t\t长痘痘(鼻尖,脸上等部位)的原因,应该怎么办?
  5. php小红针有副作用吗,hph小红针精华液怎么样?hph小红针精华液测评
  6. android 局域网聊天工具(可发送文字/语音)
  7. 【Git】查看改动文件清单
  8. UDS 安全认证29服务概述
  9. The Byzantine Generals Problem拜占庭将军问题理解
  10. android原生系统裁剪