MFC Bresesnham算法
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算法的更多相关文章
- 【20160924】GOCVHelper MFC增强算法(1)
//递归读取目录下全部文件(flag为r的时候递归) void getFiles(string path, vector<string>& files,string ...
- 【20160924】GOCVHelper MFC增强算法(3)
//获得当前目录路径 static CString GetLocalPath(){ CString csCfgFilePath; GetModuleFi ...
- 【20160924】GOCVHelper MFC增强算法(4)
//string替换 void string_replace(string & strBig, const string & strsrc, const string & ...
- 【20160924】GOCVHelper MFC增强算法(5)
CString ExportListToExcel(CString sExcelFile,CListCtrl* pList, CString strTitle) { CStr ...
- 【20160924】GOCVHelper MFC增强算法(2)
//创建或续写目录下的csv文件,填写“文件位置-分类”对 int writeCsv(const string& filename,const Vector<pair<st ...
- 基于Opencv和Mfc的图像处理增强库GOCVHelper(索引)
GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库.主要是对Opencv的适当扩展和在实现Mfc程序时候的 ...
- prezi,mfc,toefl,java
1 用prezi做ppt然后讲 2 用mfc把算法封起来 3 做tpo,背单词 4 写java 哪个任务都很难办.而且脚还没好.
- MFC 简单实现 DES 算法
前言 徐旭东老师说过学者就应该对知识抱有敬畏之心,所以我的博客的标题总喜欢加上"简单"二字,就是为了提醒自己,自己所学知识只是皮毛,离真理还远矣. DES 算法 DES算法是密码体 ...
- mfc动态演示排序算法
实现的排序算法 冒泡排序.选择排序.快速排序 具体实现 选用mfc中的单文档框架 ①SetTimer函数的用法. ②使用画笔画直线. ③使用FillSolidRect()函数覆盖某一矩形区域内的内容: ...
随机推荐
- FTP服务器搭建与访问的相关问题
近期想搭建在云服务器上搭建一个项目,每次远程登陆服务器实在比较繁琐,故而想到使用FTP上传下载方式来进行相应的操作:在网络上搭建FTP服务器的文档还是很丰富的,按照操作一步步来还算方便,楼主就不在这边 ...
- (转)Apache从2.2换至2.4httpd.conf的调整笔记(windows环境)
原文:https://www.cnblogs.com/tjws/articles/3469075.html#top 整理一下Windows环境Apache 2.2 改成 Apache 2.4.1后 h ...
- 什么是web标准??
web标准 不是某一个标准,而是一系列标准的集合.网页主要由三部分组成:结构(Structure).表现(Presentation)和行为(Behavior).对应的标准也分三方面:结构化标准语言主要 ...
- ionic3 npm install cordova error syscall rename
突然出现cordova 不是内部或外部命令,也不是可运行的程序或批处理文件. 可是之前cordova安装后一直用的好好的啊,后来尝试重新安装cordova 出现这个错误.也尝试重新安装了最新版本的no ...
- 大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- Gradle安装使用以及基本操作
这两天看到越来越多的在接触Gradle,然后发现我之前没有做过记录,而且之后下个月的一些有关SpringBoot的东西也需要用到,所以这里就来记录一下,方便以后使用. 简单介绍 Gradle是一个好用 ...
- TensorFlow中的设备管理——Device的创建与注册机制
背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 作为一款优秀的异构深度学习算法框架,TensorFlow可以在多种设备上运行算 ...
- 南大算法设计与分析课程复习笔记(1) L1 - Model of computation
一.计算模型 1.1 定义: 我们在思考和处理算法的时候是机器无关.实现语言无关的.所有的算法运行在一种“抽象的机器”之上,这就是计算模型. 1.2 种类 图灵机是最有名的计算模型,本课使用更简单更合 ...
- JAVA实现ATM源代码及感想
源代码 //20173626 信1705-2 郑锦package ATM;import java.io.IOException;import java.io.File;import java.io.F ...
- EF C# ToPagedList方法 The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must ……
报错信息:The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' ...