Appendix

浏览量:437

C++11 note

list initialization Initializes an object from braced-init-list. int list_initialization = { 100 }; int list_initialization{ 100 }; int list_initialization(100); int list_initialization = 100; null pointers nullptr int * p = nullptr; constexpr and constant expressions A constant expression is an

spacer
浏览量:1,029

浮点数误差

转载请注明原文章链接:http://www.twinklingstar.cn/2015/1501/roundoff-error-of-floating-point-2/ 在计算机中,小数有两种表示方式:定点数和浮点数。小数点隐含在某一个固定位置上的数据,就称为定点数。为了能正确的表示定点数,我们必需规定数据的位数和小数点的位置,以8位的数据为例,规定低3位是小数位,则一个定点数\({\left( {00010.110} \right)_2} = {2^1} + {2^{ - 1}} + {2^{ - 2}} = 2.75\)。定点表示法较为简单,但它表示的数据非常有限,无法表示数值很大的数据和数值很小的数据。为了表示更大范围的数据,数学上通常采用科学计数法,把数据表示成一个小数乘以一个以10为底的指数,例如,太阳的质量\(1.989 \times {10^{33}}\)克。科学计数法改写为\(0.1989 \times {10^{34}}\),把有效数字\(0.1989\)和以10底的指数\(34\)存储在机器中的固定单元内,就可以表示出数值如此大的数据,如果指数是一个负数,例如\( - 34\),则表示的数据的数值非常小。像这样,把一个数的有效数字和指数部分在计算机中分别予以表示,就是浮点表示法。这种表示法,相当于数的小数点位置随比例因子的不同而在一定范围内自由浮动,改变指数部分的数值相当于改变小数点的位置。 IEEE 754标准是由1985年引入的浮点数算术标准,是最广泛使用的浮点数运算标准,在2008年对该标准进行了修改。  图1. 单精度和双精度浮点数的存储格式 IEEE 754标准规定的单精度和双精度浮点数的存储格式如图1所示,最高位是符号位\(S\),规定浮点数的正负;偏置指数\(E\),紧跟在符号位之后,占\(w\)位;有效数字在最后,占\(p\)位。IEEE 754规定偏置指数\(E = 0\)和\(E = {2^w} - 1\)保留,用于表示\( \pm 0\)、\( \pm \infty \)或\(NaN\)。通过与偏置量的差来表示实际的指数值,规定偏置量\(bias

spacer
浏览量:735

算法复杂度计算公式

主定理(Master Theorem) 设\(a \ge 1,b > 1\)为常数,f(n)是函数,T(n)为非负整数,且\(T(n) = aT(n/b) + f(n)\),则有以下结果: (1)若\(f(n) = O({n^{{{\log }_b}(a - \varepsilon )}}),\varepsilon > 0\),那么\(T(n) = \Theta ({n^{{{\log }_b}a}})\); (2)若\(f(n) = O({n^{{{\log }_b}a}})\),那么有\(T(n) = \Theta ({n^{{{\log }_b}a}}logn)\); (3)若\(f(n) = \Omega ({n^{{{\log }_b}(a + \varepsilon )}}),\varepsilon

spacer
浏览量:1,388

3D场景的漫游,纹理装载

下载内容: (1)       实现了两种摄像机漫游类和OpenGL纹理装载类 (2)       参考NEHE中提供的教程,实现了个简单的DEMO。 (3)       下载地址:https://github.com/twinklingstar20/download_fly_camera_texture_load 下载说明: 1. 摄像机漫游类的设计 共有两个,SrCameraBase和SrCameraEdit,它们是相互继承的关系,但是它们实现的摄像机漫游的方式不同。这三个类,实现的功能有视口的设置,透视投影的设置和摄像机的设置。 SrCameraBase提供了基本的摄像机漫游的功能,就像CS游戏中人物的漫游方式一样,可以上下左右前后移动,并且旋转。它的定义如下所示,其中涉及到相机坐标的计算,这几个矩阵在《顶点渲染管线》文章中的视点坐标那块有介绍,要注意的就是该小节说的OpenGL矩阵顺序的问题。 /* \brief Setting some configuration of the tranformations and the camera,including view port transformation, projection transformation(only perspective transformation). This class provides with a simple to fly a camera

spacer
浏览量:1,010

TGA文件格式解析

本文主要介绍TGA文件格式的解析,在网上找到了一篇Truevision提供的TGA文件解析的文档,这里对它的部分内容进行翻译,具体代码实现的下载网址(见下载),在该下载页面上也提供了英文原文件,代码测试通过了参考【3】中提供的所有TGA图像文件。 一.   介绍 图1 TGA 文件格式 如图1所示,新的TGA文件包含5个区域:(1)TGA文件头(TGA File Header);(2)图像/颜色表数据(Image/Color Map Data);(3)开发者区域(Developer Area);(4)拓展区域(Extension Area);(5)TGA文件注脚(TGA File Footer)。最后3个区域是在1980年9月以前增加的,所以1989年9月以前的TGA文件格式称为旧生版本TGA文件格式,1989年9月以后的则称为新版本的TGA文件格式。接下来介绍TGA文件格式中涉及的几种类型的颜色。 伪彩色(pseudo-color)图像的每个像素值实际上是一个索引值或代码,该代码值作为色彩查找表CLUT(Color Look-Up Table)中某一项的入口地址,根据该地址可查找出包含实际R、G、B的强度值。这种用查找映射的方法产生的色彩称为伪彩色。用这种方式产生的色彩本身是真的,不过它不一定反映原图的色彩。在VGA显示系统中,调色板就相当于色彩查找表,从16色标准VGA调色板的定义可以看出这种伪彩色的工作方式。伪彩色图像是每个像素的颜色不是由每个基色分量的数值直接决定,而是把像素值当作彩色查找表的表项入口地址,去查找一个显示图像时使用的R,G,B强度值,用查找出的R,G,B强度值产生的彩色称为伪色彩。 真彩色(true-color)是指图像中的每个像素值都分成R、G、B三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为真彩色。例如图像深度为24,用R:G:B=8:8:8来表示色彩,则R、G、B各占用8位来表示各自基色分量的强度,每个基色分量的强度等级为2^8=256种。图像可容纳2^24=16M种色彩。这样得到的色彩可以反映原图的真实色彩,故称真彩色。例如,用RGB 5:5:5表示的彩色图像,R,G,B分量大小的值直接确定三个基色的强度,这样得到的彩色是真实的原图彩色。 调配色(direct-color)的获取是通过每个像素点的R、G、B分量分别作为单独的索引值进行变换,经相应的色彩变换表找出各自的基色强度,用变换后的R、G、B强度值产生的色彩。 调配色与伪彩色相比,相同之处是都采用查找表,不同之处是前者对R、G、B分量分别进行查找变换,后者是把整个像素当作查找的索引进行查找变换。因此,调配色的效果一般比伪彩色好。 调配色与真彩色比,相同之处是都采用R、G、B分量来决定基色强度,不同之处是前者的基色强度是由R、G、B经变换后得到的,而后者是直接用R、G、B决定。在VGA显示系统中,用调配色可以得到相当逼真的彩色图像,虽然其色彩数受调色板的限制而只有256色。 二.   文件结构分析 2.1     TGA文件头(TGA FILE HEADER) 图像信息字段长度(ID length)– 字段1(1个字节): 这个字段规定了包含在字段6(Image ID字段)中的字节数,最大的字符数是255,它的值为0,则表示在这个文件中没有图像信息字段。 颜色表类型(Color Map Type)– 字段2(1个字节): 当前已定义的有两个值0或者1,0 表示没有颜色表(color

spacer
浏览量:1,599

八叉树颜色量化、BMP、TGA文件解析

下载内容: (1)       C++程序:实现了八叉树颜色量化,写BMP文件和读BMP文件,写TGA文件和读TGA文件三个功能; (2)       对BMP文件格式和TGA文件格式较完整的叙述的英文文档   (3)       下载地址:https://github.com/twinklingstar20/octree-bmp-tga/ 下载说明: 在写BMP文件时,使用到八叉树颜色量化的方法。而BMP文件格式的解析,从网上可以找到很多这样的博客,比如CSDN上的博客【1】,这里不再描述BMP文件结构。 这里特别说明一点是在代码的实现中,对于每个像素用15bit或者16bit表示的情况。常规的方法,解析出来的RGB颜色值是5位的,把它左移3位就可以。采用参考【2】中的方法,如下所示,在左移3位后,同时在尾部加上一些附加位。具体的说明可以参见相应的博客。 result.r = (result.r << 3) | (result.r >> 2); result.g = (result.g << 3) | (result.g >> 2); result.b = (result.b << 3) | (result.b >> 2); 对TGA文件格式的解析,可以参见本网站上的博客《TGA文件格式解析》。  对八叉树颜色量化方法,可以参见本网站上的博客《八叉树颜色量化》。

spacer