Bezier曲线很常用,一般2D绘图软件里都有。比如photoshop,flash之类。
它背后的原理简单的超乎想象,体现了数学的美妙。

先从简单的开始,两个点之间进行线性插值。

很容易理解,可以得到
[latex] B(t)=P_0+t(P_1-P_0)=(1-t)P_0+tP_1,tin[0,1] [/latex]
当然这是最简单的情形,如果扩展到三个点该如何插值呢?

从上面图片上可以看到,可以分成三步,从P0到P1进行上面的一维情形,得到点Q0,再从P1到P2,得到Q1,那么就有
[latex]Q_0=(1-t)P_0+tP_1[/latex]
[latex]Q_1=(1-t)P_1+tP_2[/latex]
然后再对Q0和Q1进行线性插值,得到点B
[latex]B=(1-t)Q_0+tQ_1=(1-t)^2P_0+2t(1-t)P_1+t^2P_2[/latex]
t从0到1增加,就得到了一条曲线,如下图

同样可以推广到四个点的情形,这样的曲线中,t的最高幂是三次。三次样条曲线用的最多,因为它提供了足够的可控制性和满足大部分场合的精度,同时又保持了相对的简单。
依照上面的方法,可以得到三次的情形
[latex]B(t)=(1-t)^3P_0+3(1-t)^2tP_1+3(1-t)t^2P_2+t^3P_3,tin[0,1][/latex]
这个时候可以注意到...

Yea,from the table of my memory I'll wipe away all trivial fond records

Everyday I found myself somewhat pessimistic,wondering what to do,the meaning of things I'm pursuing or should pursue.

I don't want to accept the truth that I'm an ordinary people like anyone else.

前几天在图书馆找些数学方面的书看,很自然的导致了我用一些数学软件之类的想法。以前maple和matlab用过一些,在wikipedia上看了篇对比介绍的文章,又下了几个,今天挨个试了试。

先是一个叫做Euler的开源软件,界面简约实用,功能还行吧,用起来还是比较顺手的,不过功能稍微弱了一点。

mathematica应该算是一个比较重量级的吧,不过我以前没有使用过,今天装上试了一下。符号运算能力挺强的,它的notebook界面让我觉得很爽很专业,特别是在当中在plot几幅图,跟公式夹杂在一起,就像一篇排好版的论文一样。

又翻出maple装了上来,记得我大一刚接触它的时候,唏嘘不已,强大的符号运算能力让我对计算机能做的事情感到惊讶,不过现在再用也没什么感觉了。

没想到,看了一下今天的日期,三月十四号,Pi,呵呵,太巧了~~~

我常常低估解决一个问题需要的时间,大致看一眼问题,规划一下思路,然后考虑考虑是否可行,凭感觉给出一个时间。可能对于熟悉的或者解决过的问题,这样子估计的误差不是太大。一旦遇到未知的领域,结果却是谬之千里。当解决未知问题的时候,在纸上勾画出大致的算法是一种情形,一行行代码敲进去的时候,往往会变成另外的情形。大量的细节性的问题没有考虑周全。有时认为困难的地方,反倒是最简单的。那些认为无足轻重的枝枝叶叶,形成一股极大的阻力,缠绕在四肢,降低前进的步伐。周四吧,吃过晚饭之后,突然想写一个程序匹配正则表达式。没有任何外加原因,我自己都奇怪,仿佛上帝说,你写个那样的程序吧。于是我就动手开始了,心想看起来不太难,一个晚上搞定吧。先是写了二百行左右的代码,最后发现整个思路都有问题,第二天又重新开始写,写了又改,改了又写。最后大致剩三四百行。一开始我试图直接从正则表达式构造一个dfa,也就是第一天晚上的想法,后来发现太困难放弃了。又看了看书,也就是那本dragon book。周五一天,完成了从正则表达式到nfa的程序。表面上看使用Thompson构造法似乎很容易就能得到结果了,但我低估了实现数据结构表示形式以及操作等细节实现的复杂度。再加上一大部分调试的时间,磨蹭了一天才完成。昨天跟一个同学出去打台球了,晚上回来看了部电影,没写程序。今天又折腾了一天,主要是将nfa转换成dfa,也就是那个很简单的子集...