摘要:
在看三边Bezier曲面片时,想到一个相对题外的问题,即x+y+z=n,x,y,z >= 0,则求整数x,y和z的组合个数。这在高中时被数学老师(周海宁)称为“小球插板”问题。对于x,y和z为正数的情形比较自然,即n个小球一字排开,其间的n-1条缝隙取2个(x与y,y与z的间隔)组合,因此共有组合数C(n-1,2);而对于题设情形,即含零的插板,就略微困难,但记得以前解决的办法也不难。如果用枚举插板捆绑情形非常复杂,寻找规律却能发现其组合数是C(n+k,k),其中k是板的个数。现在就要为这个结果寻找依据。不难设想,构造n+k个盒子,将这“无差异的”n个小球和k块板放入,每一种放置都对应一 阅读全文
摘要:
CG造型中用到较多曲线论和曲面论的知识,这在一般分析学课程中不作为重点,而属于微分几何讲授的内容。一些不十分艰深的数学参考书,如南开大学数学丛书系列之一《微分几何》(孟道骥,梁科著,科学出版社出版),都能对相关理论内容做较详细的阐述。 在曲线连续部分,有关G2和C2关系问题,容易引起一些误解。其实G2已经保证了k(s)*N(s)的相等,但C2的要求是P"(t)的相等,而这要比前者要求更严格。 有关G2本质上等价于k(s)*N(s)相等的论证如下: G2要求有公共“曲率矢”: P'(1)×P"(1)/|P'(1)|3 = Q'(0)× 阅读全文
摘要:
论题1. 正方形刷子的边表法大意a = 正方形半宽;// 前期边界处理// ...for (x = x0; x <= x1; x++){y = 用Bresenham算法生成;yU = y + a;yD = y - a;为(x + a)处创建活动表;[x - a, x + a]边表区间用和[yU, yD]相与值更新;// 除(x + a)处外,其余的只需更新区间的一侧用(x - a)处的区间绘制一竖线,并删除该活动表;}// 后期边界处理// ...附:图形学教学网站:http://necweb.neu.edu.cn/ncourse/tuxingxue/ 阅读全文
摘要:
习题IV.2 定义f为仿射保持(Affine Preserved)的,如果对任意向量x1和x2有f((1 - a) * x1 + a * x2) = (1 - a) * f(x1) + a * f(x2),证明:f仿射保持的充要条件是f是仿射变换。 证:充分性易证,只证必要性。由仿射保持性,f(a * x)= f(a * x + (1 - a) * 0) = a * f(x) + (1 - a) * f(0)。令g(x) = f(x) - f(0),则g(a * x) = a * g(x),即g满足乘法不变性。又g(0.5 * x1 + 0.5 * x2) = f(0.5 * x1 + ... 阅读全文
摘要:
dede提出了一个用互斥量(Mutex)模拟信号量(Semaphore)的课题,非常有趣。 dede提出的方案应该这样,用i作为状态标识: lock(i_m); if (i > 0) { i--; unlock(i_m); enter_critical_region(); lock(i_m); i++; unlock(i_m); } else { unlock(i_m); lock(m); enter_critical_region(); unlock(m); } 如果没有理解错,信号量用于限制可同时进入关键区域的线程个数,而i也起到这个目的。那么当线程陆续创建并陆续退出的时候(在一定时 阅读全文
摘要:
以前以为投影也就投影了,并不了解投影也可视作坐标变换,而且也是一个齐次坐标(Homogeneous Coordinate)系的坐标变换。因此书中的介绍一开始也不明白——它说透视投影会把直线映射成曲线,还特地验证一下,发现投影为2D空间(摄像机平面)并不会发生这种情况,在仔细一看才知道,它指的是映射到3D空间,在z方向发生了畸变。而后逐渐了解,原来z方向的位置信息(depth)在渲染级模块处(所谓的Z-Buffer)有特殊用处(直线上每个点的depth均通过直线两端的点线性插值完成,因此可能造成depth位序异常)。当然这个问题在某些场合是不会发生的,例如完全基于光线跟踪算法的渲染并不是这样.. 阅读全文
摘要:
假定函数原型: int test (int r0, int r1, int r2, int ext1); 发生函数调用时,如: // ... test(a, b, c, d); // ... 编译器会将局部变量a,b,c在函数调用附近分别处理到寄存器R0,R1,R2中,而更高的参量,如ext1,则顺次从字节地址SP+0xC位置开始存放。在执行CALL指令调用子程序的时候,堆栈寄存器FP和SP仍不发生变化,直到,执行LINK指令,寄存器将发生如下变化: 1. [--SP] = RETS; 2. [--SP] = FP; 3. FP = SP; // FP+0保存原FP,F... 阅读全文
摘要:
=== 一般代码规范,General Regulations for Coding (quanben,2007-3-21试行) ===== 历史 == 2007-04-28-09:04,修订,放宽了对数字命名的限制。 2007-04-18-09:38,增订了一些建议。 2007-04-04-11:07,“注释”板块增订。 2007-03-30-14:42,微小修改。 2007-03-28-22:12,修订。 2007-03-21-23:12,初订。== 目的 == 规定C/C++的关键字的编码。== 基本原则 == 1. 可分辨,无歧义或无显著的歧义; 2. 为工程实践提供快速命名指导,且有助 阅读全文
摘要:
GDT和LDT描述符(段描述符):struct Segment_Descriptor{ ushort segment_limit_lo : 16; uint23 segment_base_lo : 24; uint4 type : 4; uint1 desc_type : 1; uint2 dpl : 2; uint1 present: 1; uint4 segment_limit_hi : 4; uint1 unknown_avl_bit : 1; uint1 reserved: 1; // always 0 uint1 d_bit : 1; uint1 granularity : 1;}. 阅读全文
摘要:
现在网上JPEG2000的Kakadu 2.23源代码似乎找不到了。这个不奇怪,因为Kakadu本身早已商业化。其他的JPEG2000的源码也不少,例如OpenJPEG和Jasper,都是开源的。比较实验一般认为Kakadu的图像质量不好,但我们实验下来,Kakadu(2.23版本,开启MMX和汇编)在编解码速度远优于其他大部分JPEG2000软件。 JPEG2000是一种复杂的图像编码方式,笔者可以毫不夸张地说,其技术上的复杂性甚至(远)超过H.264(表现在小波变换,位平面编码,质量层分割,更夸张的基于上下文的算术编码),当然追求目标,实现效果以及应用范围和前景另当别论。或者可以这样... 阅读全文