Bresesnham算法绘制直线段###

Bresenham算法的意义:高效的将图形光栅化。其计算过程中均采用加法运算,故大大减少了程序的开销。

  • 绘制直线段(MFC中)
//传入参数:起点、终点,颜色
void CMy3_4View::Bresenham(CPoint p0, CPoint p1, COLORREF CLR)
{
//自定义二维坐标系
CDC *pDC = GetDC();
CRect rect;
GetClientRect(&rect);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(rect.Width(), rect.Height());
pDC->SetViewportExt(rect.Width(), -rect.Height());
pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);
rect.OffsetRect(-rect.Width()/2, -rect.Height()/2); //开始绘制
CPoint temp, p;
int dx=p1.x-p0.x;
int dy=p1.y-p0.y;
double k=dy*1.00/dx*1.00;//斜率
COLORREF clr=CLR;//直线颜色 //不同斜率分别讨论
if(dx==0)//垂线
{
if(dy<0)//七点在上方,调换
{
temp=p0;
p0=p1;
p1=temp;
}
for(p=p0; p.y<p1.y; p.y++)//主移动方向->y,不包括p1
{
pDC->SetPixelV(p.x, p.y, clr);
}
} else//非垂线,斜率k,中点误差项d
{
double d;
if(k>1.0) // k > 1.0
{
if(dy<0)
{
temp=p0;
p0=p1;
p1=temp;
}//p0在左下
d=1-0.5*k;
for(p=p0; p.y<p1.y; p.y++)//主移动方向->y,不包括p1
{
pDC->SetPixelV(p.x, p.y, clr);
if(d>=0)
{
d+=1-k;
p.x+=1;
}
else
{
d+=1;
}
}
} else if(k>=0 && k<=1) // 0 = < k < = 1
{
if(dx<0)
{
temp=p0;
p0=p1;
p1=temp;
}//p0在左下
d=0.5-k;
for(p=p0; p.x<p1.x; p.x++)//主移动方向->x,不包括p1
{
pDC->SetPixelV(p.x, p.y, clr);
if(d>=0)
{
d=d-k;
}
else
{
d+=1-k;
p.y+=1;
}
}
} else if(k>=-1 && k<0) //-1 = < k < 0
{
if(dx<0)
{
temp=p0;
p0=p1;
p1=temp;
}//p0在左上
d=-0.5-k;
for(p=p0; p.x<p1.x; p.x++)//主移动方向->x,不包括p1
{
pDC->SetPixelV(p.x, p.y, clr);
if(d>0)
{
d-=1+k;
p.y--;
}
else
{
d-=k;
}
}
} else if(k<-1) // k < -1.0
{
if(dy>0)
{
temp=p0;
p0=p1;
p1=temp;
}//p0在左上
d=-1-0.5*k;
for(p=p0; p.y>p1.y; p.y--)//主移动方向->y,不包括p1
{
pDC->SetPixelV(p.x, p.y, clr);
if(d<0)
{
p.x+=1;
d-=1+k;
}
else
{
d-=1;
}
}
} else
{pDC->TextOut(0, 0, "ERROR in draw!");} }
pDC->DeleteDC();
}
VC++ 6.0编译通过!

MFC Bresesnham算法的更多相关文章

  1. 【20160924】GOCVHelper MFC增强算法(1)

        //递归读取目录下全部文件(flag为r的时候递归)     void getFiles(string path, vector<string>& files,string ...

  2. 【20160924】GOCVHelper MFC增强算法(3)

        //获得当前目录路径     static CString GetLocalPath(){         CString csCfgFilePath;         GetModuleFi ...

  3. 【20160924】GOCVHelper MFC增强算法(4)

    //string替换     void string_replace(string & strBig, const string & strsrc, const string & ...

  4. 【20160924】GOCVHelper MFC增强算法(5)

    CString ExportListToExcel(CString  sExcelFile,CListCtrl* pList, CString strTitle)     {         CStr ...

  5. 【20160924】GOCVHelper MFC增强算法(2)

    //创建或续写目录下的csv文件,填写“文件位置-分类”对     int writeCsv(const string& filename,const Vector<pair<st ...

  6. 基于Opencv和Mfc的图像处理增强库GOCVHelper(索引)

    GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库.主要是对Opencv的适当扩展和在实现Mfc程序时候的 ...

  7. prezi,mfc,toefl,java

    1 用prezi做ppt然后讲 2 用mfc把算法封起来 3 做tpo,背单词 4 写java 哪个任务都很难办.而且脚还没好.

  8. MFC 简单实现 DES 算法

    前言 徐旭东老师说过学者就应该对知识抱有敬畏之心,所以我的博客的标题总喜欢加上"简单"二字,就是为了提醒自己,自己所学知识只是皮毛,离真理还远矣. DES 算法 DES算法是密码体 ...

  9. mfc动态演示排序算法

    实现的排序算法 冒泡排序.选择排序.快速排序 具体实现 选用mfc中的单文档框架 ①SetTimer函数的用法. ②使用画笔画直线. ③使用FillSolidRect()函数覆盖某一矩形区域内的内容: ...

随机推荐

  1. Unity 5 使用Roslyn编译器支持C# 7

    Unity 2017可选使用新的Mono编译器,支持.NET 4.6和C# 6,解决bug的同时,代码优化更佳. Unity 5可以使用社区开源方案:https://bitbucket.org/ale ...

  2. mysql 开发基础系列11 存储引擎memory和merge介绍

    一. memory存储引擎 memoery存储引擎是在内存中来创建表,每个memory表只实际对应一个磁盘文件格式是.frm.   该引擎的表访问非常得快,因为数据是放在内存中,且默认是hash索引, ...

  3. Java 容器 & 泛型:五、HashMap 和 TreeMap的自白

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Java 容器的文章这次应该是最后一篇了:Java 容器 系列. 今天泥瓦匠聊下 Maps. 一.Ma ...

  4. [Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  5. 详解Maven用户的配置settings.xml

    Maven用户设置 作者其他技术文章 1)Oracle性能优化之查询语句通用原则 2)Redis常用命令 3) SpringCloud入门之常用的配置文件 application.yml和 boots ...

  6. 逆向实战干货,植物大战僵尸快速定位自动捡阳光Call,或者标志

    逆向实战干货,快速定位自动捡阳光Call,或者标志 注意: 关于CE和OD的使用,这里不再多说,快速定位,默认大家已经有了CE基础,或者OD基础. 第一种方法,找Call 第一步,打开CE,搜索阳光值 ...

  7. 前端XSS相关整理

    前端安全方面,主要需要关注 XSS(跨站脚本攻击 Cross-site scripting) 和 CSRF(跨站请求伪造 Cross-site request forgery) 当然了,也不是说要忽略 ...

  8. TensorFlow中的设备管理——Device的创建与注册机制

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 作为一款优秀的异构深度学习算法框架,TensorFlow可以在多种设备上运行算 ...

  9. xargs原理剖析及用法详解

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 学习这个xargs花了很长时间,在网上翻了很久也查了很多书关于 ...

  10. [转]git commit之后,想撤销commit

    本文转自:http://www.cnblogs.com/lfxiao/p/9378763.html 写完代码后,我们一般这样 git add . //添加所有文件 git commit -m &quo ...