GIS图形显示系统———椭圆的裁剪
王燕贞
(漳州职业技术学院,福建漳州
[摘
要]
363000)
随着计算机飞速发展,组件式编程变得越来越重要。本设计的主要目的就是在Delphi7开发环境下,利用COM技术及Delphi7的一些新特性实现GIS的图形显示,如椭圆的显示、裁剪等一些基本操作,并将这些功能以组件的形式运用到其他的应用程序中去。[关键词]
地理信息系统;组件对象模型;图形显示
地理信息系统是国家信息资源的重要组成部分。GIS是一门综合性的技术,其应用需要利用和集成其他技术,同时,其他信息技术的应用也需GIS。必须把IT和GIS结合起来加以考虑,在技术上,发展GIS也要符合信息技术的潮流。
1椭圆裁剪
1.1椭圆边框取点算法
要对椭圆进行裁剪,首先必须将椭圆尽可能的等分,并且所取的点要足够多,这样得到的多边形才有可能近似椭圆。所以在取点的问题上必须遵循这样一个原则,那就是所取的点的个数必须和椭圆的大小成正比。决定椭圆大小的就是它的X轴半径和Y轴半径,所以决定采用将X轴半径等分的方法。考虑到精度的问题,所以采用以像素为单位进行等分的方法。那么点的个数就可以用X轴的半径除以像素单位来得到。并且每两个点之间的横坐标只会相差一个像素,而纵坐标可以根据椭圆的横坐标计算出来。
以下只以第一象限为例:
首先,假设椭圆的中心点为(0,0),取(0,b)为第一个点,并
且开始进行计算,选取的点的横坐标每次增加一个像素单位,而纵坐标
则由椭圆的公式变形后求得。
椭圆的公式:
X2
/a2
+Y2
/b2
=1
经过变形后:Y=(b2-X2×b2/a2)1/2
由这个公式,就可以算出第一象限椭圆上各个点的纵坐标。下面介绍以下如何得到第二、第三、第四象限内的点的坐标。初始假设椭圆的中心点的坐标为(0,0),所以第二象限内的点只需将第一象限内的点横坐标取其相反数,纵坐标的值保持不变。
为了保证精确度,还必须定出几个基准点,这四个基准点必须是在椭圆边框上,近似椭圆的多边形上的点。四个基准点如下:
DPoint[0].X:=0;DPoint[0].Y:=b;DPoint[n+1].X:=a;DPoint[n+1].Y:=0;DPoint[2n+2].X:=0;DPoint[2n+2].Y:=-b;DPoint[3n+3].X:=-a;DPoint[3n+3].Y:=0;
四个基准点的具体使用方法:首先得到了第一象限的点的值:设定第一个基准点:
DPoint[0].X:=0;
DPoint[0].Y:=b;n:=a/1;//把X轴半径按照像素单位等分fori:=1tondobegin
DPoint[i].X:=DPoint[i-1]+1;//得到第一象限内椭圆上的点的横
坐标;
DPoint[]Y=i.:round(sqrt(sqr(b)sqr(DPoint[]Xi.)*sqr(b)/sqr(a)));//由椭圆变形公式得到第一象限内椭圆上的点;
28
2008年3月(上)
end
其次设定第二个基准点:
DPoint[n+1].X:=a;DPoint[n+1].Y:=0;
然后得到第四象限的点
fori:=1tondobegin
DPoint[n+1+i].X:=DPoint[n+1-i].X;//将得到的第一象限点的横坐
标赋值给第四象限的点的横坐标;
DPoint[n+1+i].Y:=-DPoint[n+1-i].Y;//将得到的第一象限的点
的纵坐标取反赋值给第四象限的点的横坐标;
end;
设定第三个基准点:
DPoint[2n+2].X:=0;DPoint[2n+2].Y:=-b;
然后得到第三象限的点:
fori:=1tondobegin
DPoint[2n+2+i].X:=-DPoint[2n+2-i].X;//将得到的第四象限的
点的横坐标取相反数赋值给第三象限的点的横坐标;
DPoint[2n+2-i].Y:=DPoint[2n+2-i].Y;
//将得到的第四象限的点
的纵坐标赋值给第三象限的点的纵坐标;
End;
设定第四个基准点:
DPoint[3n+3].X:=-a;DPoint[3n+3].Y:=0;
最后得到第二限的点:
fori:=1tondo
begin
DPoint[3n+3+i].X:=DPoint[3n+3-i].X;
//将得到的第三象限的点
的横坐标赋值给第二象限内的点的横坐标;
DPoint[3n+3+i].Y:=-DPoint[3n+3-i].Y;//将得到的第三象限的
点的纵坐标取反赋值给第二象限的点的纵坐标;
end;
至此,椭圆的边框已经被等分为横坐标只相差一个像素的4n+3个点,并且存储在DPoint这个数组内。但前面举的例子都是以(0,0)点为椭圆的中心,如果椭圆中心不是(0,0)的话,只需要将每个得到的点的横坐标和纵坐标分别加上中心的横坐标和纵坐标,就可以得到正确的点的坐标值了,所以最后一步就是加上椭圆中心的坐标值。
1.2椭圆裁剪的具体实现
椭圆裁剪的主要思想:首先获得椭圆上的点;然后将获得的点存
入数组,并且读入边框的坐标,将边框的坐标和数组内的点坐标进行比较,在框内的保留,在框外的取边框的坐标,得到另一组数据存入另一个数组,且转换为屏幕坐标,以画多边形的方法将裁剪后的区域画出。此设计实现了GIS底层图形图像的显示以及裁剪操作,并以组件的形式运用到实际的应用程序中。将GIS软件作为组件具有二次开发方便、易于集成、无限扩展等特点。