布道

布道

IEEE 754 的 inf 比较问题

首先上结论: 当涉及浮点数比较时,一定要考虑比较符号两侧都是inf的情况. 原因: inf==inf,inf<=inf,inf>=inf 这三个比较都为真(-inf同理),而这种结果可能与我们的期望不符. 解决方法: 1. 如果为真是可以接受的,那么直接使用比较运算符,例如a<=b 2. 如果为真是不可以接受的,那么应当使用作差,例如(a-b)<=0, 这种情况下,当a和b都为inf时,inf之间的运算会输出NaN,从而导致比较结果为false 例如,我有这样一个应用场景: 有射线R和两个平面S0及S1,我们需要求射线R与平面S0的交点p0,以及射线R与平面S1的交点P1. 且要求p0不能比p1离射线起点更远(可以重合) 假如我们用直线的参数方程来描述交点,显然,上面的目标很容易用 t0<=t1 来描述. 此时就可能出现 inf<

By Edimetia3D

布道

Python for C++ Programner

这里谈一下个人的学习建议. 首先可以阅读官方的入门教程, 看完这一部分, 对于一个熟练的C++程序员, 应该可以凑合写出可堪一用的代码了. 对于大部分不以Python为主要工作语言的开发者,到此基本就足够了. 如果有时间,我建议直接阅读Python in a Nutshell第七章之前的内容(不含第七章),并不用完全看懂,大部分细节也不用去记忆,只需要看完即可,至此,你就能基本了解Python的运行机制, 写出质量稳定可控(不会存在低级错误)的代码了. 上面两步完成后, 对一个熟悉C++的程序员而言, 基本任何Level的Python资料都可以看了. 你可以继续看Python in a nutshell中感兴趣的部分,也可以选择Fluent Python. 在有相当多的开发经验之后,可以阅读Python Cookbook. 如果仍然想进一步深入, 那么你应该直接学习CPython解释器的实现,Python Developer’s Guide可以作为一个入口. 最后,本文仅仅简单扼要的说明了Python和C++不同的一些特性, 可以作为补充阅读. 书评

By Edimetia3D

布道

字符集与编码

近义名词 * 多字节字符(Multibyte char) ~ 变长编码, 一个字符可能由多个字节(字节数不定)表示, 因此每个需要按一定规则添加额外的信息,以分割字符. * 宽字节字符(Wide char) ~ 定长编码, 使用定长的字节表示字符,因此字符之间没有额外的分割信息. 字符绘制基础 * 假设有函数drawChar(charSet,code_point), drawChar将根据(charSet,code_point)两个参数在字体数据中定位一个字符的几何信息(称为字形),将其在屏幕上画出来. "Char Set"与"Code Point" * charSet 对应的概念为"字符集",顾名思义,是字符的集合,从数学角度看,它是一个有序集(每个元素都有确定的位置) * code_point 对应的概念为&

By Edimetia3D

布道

图像的简单相位配准 with MATLAB

相位配准概述 相位配准是一种非常经典的理论,理论论述互联网上有很多,我直接给出一个流程图,简述重点。 * 相位配准的原始理论互联网上已经很多,我不过多赘述,使用完全相同的两个图像在空间内平移进行推导。只强调一下,在实际使用时,可以证明,只要两个图像有完全相同的部分,那么就可以使用相位配准 * 带有旋转/缩放的相位配准不要看普通教材,普通教材愚蠢的试图先绕图像中心旋转缩放,再进行平移。事实上,只要有空间变换(或刚体运动学)知识,就可以知道如果刚体可以仅通过缩放和旋转从A变为B,那么必然可以确定一个空间点O,使刚体A仅绕O进行一次缩放和一次旋转到达B,也就是说,只要我们确定了点O,那么进行对数极换元就可以直接确定旋转和缩放参数。 * 如果只是绕中心旋转的图片,那么做对数极换元,再做平移的相位配准即可,我必须说,这毫无意义,这里面的工作最大头为对数极换元,which和图像处理没有什么关系。 * MATLAB 2014a后自带了一个 imregcor 函数,它对重合区域较大(目测至少20%)的两个图像进行相

By Edimetia3D