丁宇辰
摘要:绘制椭圆时,通常是直接调用编程工具自带的函数或过程,且平行于x轴或y轴方向,对于任意方向的椭圆则不能直接绘出。本文利用Bezier曲线的生成原理,提出一种任意方向的椭圆绘制方法。
关键词:Bezier曲线;椭圆
中图分类号:TP391文献标识码:A文章编号:1009-3044(2012)01-0133-02
A Method of Any Direction of Drawing Ellipse
DING Yu-chen
(School of Computer Engineering, Nanjing Institute of Technology, Nanjing 211167, China)
Abstract: When plan ellipse, usually called directly programming tool that comes with a function or procedure, and parallel to the x axis or y axis, the ellipse cannot be directly drawn in any direction. This paper use of Bezier curve generation principle, present a ellipse drawing methods in any direction.
Key words: Bezier curves; Ellipse
在一些高级语言(如VC、VB、C、C++等)中绘制椭圆通常是调用现成的函数或过程,但用这种方法绘制的椭圆,其长轴只能是沿屏坐标系的x轴或y轴,即平行于x轴或y轴。对于任意方向的椭圆,则不能直接绘出,需要进行一系列的变换,过程繁琐且不方便。本文介绍用Bezier曲线的生成原理来绘制任意方向的椭圆的方法,该方法简单易于实现。
伪码过程描述如下:
vcellipse(int m,int n,int a,int b,int angle)
{…//变量定义
int dpoint (4,2)//定义数组,表示控制多边形的顶点
int bezierx(N);beziery(N)//定义曲线上的点
If angle=0 or angle=180 then //如果是水平方向的椭圆,求控制多边形的顶点
dpoint (1,1)= m+a…
dpoint (4,2)= n-b
else if angle=90 then//如果是垂直方向的椭圆,求控制多边形的顶点
dpoint (1,1)= m-b…
dpoint (4,2)= n+a
else
dpoint (1, 1) = (-b0 + deta) / (2 * a0)/ /计算其它方向的控制多边形顶点…
dpoint (4,2)= -dpoint(2, 2) + 2 * n end if
for i=1 to N//计算bezier曲线上的点
t=t+ε//ε是一个微小的量
bezierx(i)= (-t ^ 3 + 3 * t ^ 2 - 3 * t + 1) * dpoint(1, 1) + (3 * t ^ 3 - 6 * t ^ 2 + 3 * t) * dpoint(2, 1) + (-3 * t ^ 3 + 3 * t ^ 2) * dpoint(3, 1) + t ^ 3 * dpoint(4, 1)
beziery(i)= (-t ^ 3 + 3 * t ^ 2 - 3 * t + 1) * dpoint(1, 1) + (3 * t ^ 3 - 6 * t ^ 2 + 3 * t) * dpoint(2, 1) + (-3 * t ^ 3 + 3 * t ^ 2) * dpoint(3, 1)+ t ^ 3 * dpoint(4, 1)
next i
for i=1 to n
Line(bezierx(i),beziery(i), bezierx(i+1),beziery(i+1))//利用画线方法输出曲线
next i
}
4结束语
本文提出一种绘制任意方向椭圆的一种方法,这种方法编程简单,易于实现。在精度要求不是很高的场合下,所用的方法基本能达到要求。
参考文献:
[1]杜晓增.计算机图形学基础[M].北京:机械工业出版社, 2007:119-121.
[2]周天祥,杨勋年.快速绘制Bezier曲线.计算机辅助设计与图形学学报, 2002,14(6): 501-502.
[3]徐雨明,文双春.Bezier曲线递归分割算法的研究.衡阳师范学院学报, 2007,28(6):114-115.