hwnd, &ps) ; return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
由於这个程式要用到一些在第七章才讲的滑鼠处理方式,所以我不在这里讨论它的内部运作(不过,这也是简单的),而是用这个程式来实验性地操纵贝塞尔曲线。在这个程式中,两个顶点设定在显示区域的上下居中、左右位於1/4和3/4处的位置;两个控制点可以改变,按住滑鼠左键或右键并拖动滑鼠可以分别改动两个控制点之一。图5-13是一个典型的例子。
除了贝塞尔曲线本身,程式还从第一个控制点向左边的第一个端点(也叫做开始点)画一条直线,并从第二个控制点向右边的端点画一条直线。
由於下面几个特点,贝塞尔曲线在电脑辅助设计中非常有用。首先,经过少量练习,就可以把曲线调整到与想要的形状非常接近。

其次,贝塞尔曲线非常好控制。对於有的曲尺种类来说,曲线不经过任何一个定义该曲线的点。贝塞尔曲线总是由其两个端点开始和结束的(这是在推导贝塞尔公式时所做的假设之一)。另外,有些形式的曲尺公式有奇异点,在这些点处曲线趋向无穷远,这在电脑辅助设计中通常是很不合适的。事实上,贝塞尔曲线总是受限於一个四边形(叫做「凸包」),这个四边形由端点和控制点连接而成。
第三个特点涉及端点和控制点之间的关系。曲线总是与第一个控制点到起点的直线相切,并保持同一方向;同时,也与第二个控制点到终点的直线相切,并保持同一方向。这是用於推导贝塞尔公式时所做的另外两个假设。
第四,贝塞尔曲线通常比较具有美感。我知道这是一个主观评价的问题,不过,并非只有我才这样想。
在32位元的Windows版本之前,您必须利用Polyline来自己建立贝塞尔曲线,并且还需要知道下面的贝塞尔曲线的参数方程。起点是(
x0,y0),终点是( x3,y3),两个控制点是(x1,y1)和(x2,y2),随著t的值从0到1的变化,就可以画出曲线:
|