Wu反走样算法介绍(简单易懂) -Xiaolin Wu’s Algorithm
目录
一、算法介绍
二、算法描述
三、算法总结
一、算法介绍
Wu反走样算法,可以将线条变得更平滑,即产生抗锯齿效果。示意图如下:
二、算法描述
从起点开始,每走一步,x增加1。
在每一步中,分别计算 距离真实直线最近的 上下两个像素点 和直线之间的误差值——y坐标与真实直线y坐标之差。
如果误差值为0,则该像素点的强度取100%;如果误差值为0.8,则该像素点的强度取20%,依此类推,将上下两个像素涂上不同强度的颜色。
如下图所示:
上图中,红线代表最近的上方像素距离直线的误差值;绿线代表最近的下方像素距离直线的误差值。可以很容易看出,误差值越小,颜色涂得越深。在代码中,要计算误差值,可以使用浮点数并取小数部分的误差值。
综上,即为Wu反走样算法内容。
三、算法总结
伪代码:
void CTestView::ALine(CDC* pDC)
{CPoint p0(-100, -50), p1(200, 50), p;int dx, dy;dx = p1.x - p0.x;dy = p1.y - p0.y;double k = (double)dy / dx, e;for (p = p0, e = 0; p.x < p1.x; p.x++) {pDC->SetPixelV(p.x, p.y, RGB(e * 255, e * 255, e * 255));pDC->SetPixelV(p.x, p.y + 1, RGB((1 - e) * 255, (1 - e) * 255, (1 - e) * 255));e += k;if (e >= 1.0) {p.y++;e--;}}
}
Wu反走样算法介绍(简单易懂) -Xiaolin Wu’s Algorithm相关推荐
- Bresenham改进算法结合wu反走样算法画直线
自己打造了CLine画直线类 1.CP2类 定义了点类 class CP2 { public:CRGB clr;double y;double x;CP2();CP2(double,double,CR ...
- Wu反走样算法绘制直线段
Wu反走样算法 原理:在我看来,Wu反走样算法是在Bresenham算法基础上改进了一番,它给最靠近理想直线/曲线的两个点以不同的亮度值,以达到模糊锯齿的效果.因为人眼看到的是线附近亮度的平均值. M ...
- Wu反走样算法绘制圆(C++/MFC实现)
Wu反走样圆 原理:参考Bresenham算法,在主位移过程中计算出离理想圆最近的两个点,赋予不同的亮度值,绘制像素点即可! MFC 中CXXXView类中添加函数: //Wu算法画反走样圆 void ...
- 中点分割裁剪算法介绍 (简单易懂)
目录 一.算法介绍 二.算法描述 一.算法介绍 裁剪效果图: 中点分割裁剪算法的思想类似于二分思想,不断地在中点处将线段一分为二,对每段线段重复Cohen-Sutherland裁剪算法的线段可见性 ...
- WuxioLin 反锯齿算法(反走样算法,Xiaolin Wu Anti-aliasing algorithm) C# 代码实现
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.锯齿和反锯齿 二.Xiaolin Wu 算法代码 1.C#完整代码如下 2.举例和测试 总结 前言 笔者前几日自己 ...
- Python 快速排序算法【简单易懂,代码直接运行】
Python 快速排序算法[简单易懂,代码直接运行] 给定你一个长度为 n 的整数数列. 请你使用快速排序对这个数列按照从小到大进行排序. 并将排好序的数列按顺序输出. 输入格式 输入共两行,第一行包 ...
- 关于python中的模块的定义、使用、优点及其使用cpy文件的介绍 简单易懂
一 模块的定义及其使用规范 首先pycharm中每一个以.py结尾的python文件都是一个模块,并且模块就相当于一个工具包,当我们想使用这个工具包内的工具的时候,必须要用到import关键字来导入, ...
- [计算机图形学]反走样(前瞻预习/复习回顾)
一.前言:走样的产生 上一篇我们谈到了光栅化,在讲述光栅化时我们得到了光栅化之后的这样一张图,如下图 显然,这和我们原本的三角形严重不符,原因是像素是方块,而无法完美的拟合三角形. 也就是说我们得到的 ...
- 排序算法:简单选择排序算法实现及分析
简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...
最新文章
- IOS一些显示效果和动画效果资料
- 如何修改datagrid行的高度_如何开出一份完美的信用证?
- VMM虚拟机启动失败故障处理
- 思科交换机配置试题_(思科配置试题可以略过)
- Nginx概述与安装
- SDNU 1171.合并果子(区间dp)
- node mysql 跨库查询_nodejs 在mongodb在跨数据库之中如何进行关联起来查询,并且支持筛选关联表的条件进行查询...
- Idea插件——Translation 翻译插件安装与使用
- CodeForces round 753 problem A Linear Keyboard(线性键盘)
- 【BZOJ3674】—可持久化并查集加强版(可持久化并查集)
- 29.2. Ubuntu
- 论文笔记_S2D.60_CMRNet:相机到激光雷达地图的注册
- 【Try to Hack】masscan
- matlab 傅立叶变换去噪
- Validity和setCustomVilidity
- 练习5:MySQL数据插入、更新与删除
- 复星文旅换帅:徐晓亮任董事长职务 钱建农将任复星国际执行总裁
- 在线公开课 | 5G时代的视频云服务关键技术与实践
- 永远不要忘记_它永远不会忘记一张脸
- 最新游戏陪玩源码V2.0升级版/商业版语音聊天系统源码
热门文章
- 区块链入门教程(8)--WeBASE-Front节点前置服务
- 怎么关闭win10自带杀毒软件
- 自考知识电脑图计算机组成原理,自考“计算机组成原理”考试大纲
- Python报错 TypeError: Descriptors cannot not be created directly
- VMware虚拟机硬盘大小修改
- 6-8.4V自动升降压5V 9V 12V PD快充解决方案 TYPE-C快充
- 互联网下半场,苏宁“拼购村”如何打造现象级模式
- Win10开始菜单点击没有反应打不开怎么办?
- 程序员必备之沟通的艺术
- html表格优秀作品,40多个漂亮的网页表单设计实例