惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
I
InfoQ
The Register - Security
The Register - Security
L
LangChain Blog
H
Help Net Security
The GitHub Blog
The GitHub Blog
S
Schneier on Security
博客园 - 【当耐特】
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
IT之家
IT之家
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
雷峰网
雷峰网
N
Netflix TechBlog - Medium
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
Lohrmann on Cybersecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V
Visual Studio Blog
博客园 - 聂微东
PCI Perspectives
PCI Perspectives
Last Week in AI
Last Week in AI
A
Arctic Wolf
宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
SecWiki News
SecWiki News
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
Schneier on Security
Schneier on Security
P
Proofpoint News Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AI
AI
Engineering at Meta
Engineering at Meta

博客园 - 左洸

Vim配置Java IDE U(优)盘安装FreeBSD-9.0+GNOME_lite桌面 12306 说:有时候,能排队也是一种幸福! 如果 12306 依赖反转 —— 都给劳资消停点,谁也别来找我,我会去找你们的 ubuntu删除openjdk,安装 Sun JDK 用 PyMedia 解码并播放 mp3 文件 软件BUG造成本次动车追尾,警方已经拘留了两名 无证 程序员 SQLite 入门教程(四)增删改查,有讲究 SQLite 入门教程(三)好多约束 Constraints SQLite 入门教程(二)创建、修改、删除表 SQLite 入门教程(一)基本控制台(终端)命令 如何稳定地使用 Google 搜索 “拼木头”算法挑战赛:禁忌搜索算法,用Javascript 跑 计算机图形学(一) 图形系统综述 模拟退火算法应用于最优排列问题和最优组合问题 之 排列篇 wxPython 笔记(11)重定向程序输出到标准控制台窗口 wxPython 笔记(10)应用程序对象 wxPython 笔记(9)向窗体中加入控件 wxPython 笔记(8)设定窗体的样式
计算机图形学(二)划线算法
左洸 · 2011-06-09 · via 博客园 - 左洸

一、光栅系统绘制图形的原理

1、光栅系统的图元都是由像素点组成的

2、像素点的坐标值都是整数,是离散的,因此表示图形时会出现锯齿现象 

3、要绘制图形元素,就必须计算出组成图形元素的所有像素点的坐标值 

4、好的算法(计算所有像素的坐标值)不但速度快,还要尽可能的减小锯齿的影响


二、划线算法

1、要求:给出线段的两个端点的坐标值,绘制出直线 

2、可以计算出斜率 m 和节距 b

三、DDA算法

1、如果斜率 m 小于 1 ,则水平方向每增加一个单位,垂直方向就增加 m 个单位,即

yk+1 =yk + m

计算结果要四舍五入,这样就可快速计算出线段上所有像素点的坐标值

2、如果斜率 m 大于 1,则垂直方向每增加一个单位,水平方向就增加 1/m 个单位,即

xk+1 = xk + 1/m 

计算结果要四舍五入

3、区分 m 大于或者小于 1 是为了在变化率较小的方向上计算,可以减少锯齿

4、DDA算法的特点

充分利用了光栅的特性

比直接利用直线公式计算速度快,

累加过程中涉及到浮点运算,仍然耗时,且有误差

三、Bresenham  划线算法

1、基本思想

划线过程中,一个方向上的坐标总是加1,另一方向上的坐标要么不变、要么加1,能不能通过某种方法做出判断,利用上述特性,从而避免浮点运算 

 

如上图所示:起始点的坐标为(xi,yi),则下一点的坐标应该为(xi+1,y),这一点叫理论计算点

由于光栅系统的坐标是离散的,理论计算点不存在,所以我们只能从理论计算点的上面或者下面,即(xi+1,yi)或者(xi+1,yi+1)两个里面选一个

道理很简单, 这两个那个离理论计算点更近,就选哪个。

如图:我们可以计算 d2-d1,如果大于零,则上面的点误差更大,选则下面的点;如果小于零,则选择上面的点。

2、消除浮点运算:

pk= (delta)x  乘以  (d2-d1)

将 d2-d1 乘以 delta x 就可以消除 m ,从而避免浮点运算

3、递推公式

 pk+1 = pk + 2delta(y) - 2delta(x) (yk+1 - yk)

其中 

yk+1 - yk 的值根据 pk 的符号,要么为零(即 y 坐标不变),要么为 1(即向上递增一个坐标)

4、初始值 p0

p0 = 2delta(y) - delta(x) 

5、例题 

 

//==========================================