网站首页 语言 会计 电脑 医学 资格证 职场 文艺体育 范文
当前位置:书香门第 > 网络 > 工程制图

图形的绘制方法

栏目: 工程制图 / 发布于: / 人气:3.2W

针对计算机辅助几何造型中经常用到的各种复杂边界的平面图形,基于OpenGL的NURBS曲面绘制及裁剪功能,提出了一种绘制复杂边界平面图形的方法,避免了对平面图形进行网格化处理。以下是小编搜索整理图形的绘制方法,欢迎大家阅读!

图形的绘制方法

引言

在计算机辅助几何造型领域,常常会用到各种具有复杂边界的平面图形,其边界不仅有直线,还可能有圆弧等各种曲线。目前OpenGL提供了绘制三角面以及凸多边形的函数,没有直接提供绘制凹多边形及有曲线边界的平面图形的方法。但是其拥有强大的NURBS曲面绘制函数,可以绘制任意的NURBS曲面,并且可以裁剪绘制NURBS曲面。由于平面也可以看作是一种最简单的曲面,所以可以把OpenGL的NURBS曲面绘制功能借鉴到对平面图形的绘制当中,实现对复杂边界平面图形的绘制。

文中图形是在笛卡尔坐标系中的xoy平面上进行讨论的,对于不在这个平面上的图形,也可以在其所在的平面上建立局部坐标系,再按照如下提到的方法进行计算。

1 NURBS及其相关概念

NURBS是NonUniform Rational BSplines的缩写,表示非均匀有理B样条的意思。其核心思想在于用多个控制点来表示一条曲线或曲面。

1.1 NURBS控制点

在计算机辅助几何造型中,常常用到各种各样的曲线,可以用简单解析式表示的曲线远远不能满足要求。为了更方便地用来表示曲线、曲面形状,可以用一系列点来控制和调节曲线、曲面的形状,这些点被称为控制点。

在NURBS的理论中,控制点包含两部分信息,一部分是点的坐标值,另一部分是点的权重。点的坐标值表示点在空间中的位置,点的权重值表示点对曲线或曲面的影响大小。三维空间上的控制点可以用四维向量表示,分别代表三个坐标和一个权重值。也可以用三维向量表示,这时权重默认为1.0。二维空间上的控制点可以用三维向量表示,代表两个坐标值和一个权重,也可以用二维向量表示,此时权重默认为1.0。

1.2 NURBS曲线、曲面

NURBS曲线用空间中的一组控制点向量表示,每一个点都可以对曲线的形状有一定的影响。NURBS曲面用空间中的一组控制点矩阵表示。根据NURBS的'解析式,如果确定了控制点,也就可以唯一确定一条曲线或者一条曲面。也正是由于NURBS的这种精确表示的特性,在计算机辅助几何造型中得到了广泛的应用。

2 几种图形的NURBS表示方法

2.1 曲线

本文仅对工程中最常见的线段和圆弧进行讨论,其它曲线可以参照NURBS公式计算其表示方法。

2.1.1 直线段

用2个控制点表示,2个控制点的坐标值为线段的端点坐标值,权重为1.0。

2.1.2 圆弧

需要按照圆弧的圆心角θ的大小讨论,分以下情况:

对于0°<θ≤90°的圆弧,用3个控制点PA,PB,PC表示,其中两端的控制点PA,PC的坐标值分别为圆弧的2个端点的坐标值,权重都为1.0。中间的点PB的坐标值为圆弧两个端点处的两条切线的交点坐标值,权重值weight计算公式为:weight=cos(θ2) 。

对于圆心角超过90°的圆弧(包括圆环),可以切成多段圆弧,每段圆弧都不超过90°,再把每段圆弧用上面的方法表示,即用多段圆弧来表示。

2.2 平面矩形

平面矩形用4个控制点表示,4个控制点的坐标为矩形4个角点的坐标值。为方便起见,可以用三维向量表示,权重默认为1.0。

3 OpenGL中NURBS的特殊说明

3.1 控制点

在OpenGL中表示带权重的控制点有特殊的表示方法,对于控制点P,若其坐标为(x,y,z),权重为weight,则在OpenGL中表示该控制点的四维向量计算公式为:

=(xweight,yweight,zweight, weight)

(1)3.2 曲面裁剪函数

OpenGL中供曲面裁剪调用的函数是gluBeginTrim、gluEndTrim与gluNurbssCurve、gluPwlCurve。在进行曲面裁剪开始时调用gluBeginTrim函数,在结束时调用gluEndTrim函数。用gluNurbsCurve函数和gluPwlCurve函数绘制曲面边界,其中gluNurbsCurve函数主要用于绘制曲线边界,gluPwlCurve函数用于绘制直线边界。为了统一表示,都采用了gluNurbsCurve函数。

4 图形绘制数据计算

4.1 背景矩形绘制数据计算

对于任意一个平面有界图形,都可以在其所在的平面上找到若干个矩形,使该图形的所有部分都在矩形之中。在这些矩形中,两边与绝对坐标系的x轴与y轴平行且面积最小的矩形称为背景矩形。该矩阵与x轴方向平行的边的长度称为背景矩形的宽,与y轴平行的长度称为背景矩形的高。该矩形的四条边分别通过平面有界图形在x、y轴方向上的最大最小值点。

该方法绘制的思路是先绘制背景矩形,再根据需要绘制平面有界图形的几何边界,对背景矩形进行裁剪,生成一个完整的图形。

4.2 背景坐标系

从z轴的正方向看,以背景矩形的左下角点Pori(xori, yori)为原点,三维空间中的x轴、y轴为坐标轴建立直角坐标系,这个坐标系称为背景坐标系,背景坐标系x轴的单位长度设为背景矩形的宽,y轴的单位长度设为背景矩形的高。 4.3 图形边界控制点在背景坐标系下坐标值的计算

由于只讨论在xoy平面上的情况,所以不用考虑平面有界图形上点的z轴坐标值,这样边界上任意一个控制点的绝对坐标只需要用(x,y)两个坐标值表示。对于本文用到背景矩形,仅用到了在xoy平面上、而且两边都平行于坐标轴的矩形平面图形,两端控制点的节点参数设置为标准的0与1。裁剪边界曲线上控制点在背景矩形上的UV坐标可以看作是在背景坐标系下的坐标。

对于边界曲线上的控制点,如果其绝对坐标为(x,y),则其在背景坐标系下的局部坐标(x', y')计算公式为:

x'

y'= x-xori

y-yori×1width 0

0 1height

(2)

其中width为背景矩形的宽,height为背景矩形的高。xori、yori为背景坐标系的原点坐标值。

计算好边界曲线上的控制点后就可以确定裁剪曲线的绘制数据,边界曲线上的控制点权重不变。

5 绘制流程

根据以上分析,可以采用以下的绘制流程来绘制一个平面图形:①确定背景矩形;②确定背景坐标系;③求出图形边界曲线的控制点的绝对坐标及权重,并求出其在背景坐标系上的坐标;④按照OpenGL控制点的表示方法构造显示数据;⑤调用NURBS曲面绘制函数绘制背景矩形;⑥调用NURBS曲面裁剪函数对绘制的背景矩形进行裁剪,生成平面几何图形。

6 程序实例

为了检测这种方法的有效性,选取了如图1所示的图形,该图形包含直线边界和圆弧边界,而且有一个内部的孔。

按照本文的方法,在Dev-C++软件中,结合C++程序设计语言,绘制出结果如图 2所示的图形。

可以看出用这种方法可以完整精确地绘制出所需的图形。

7 结语

通过对xoy平面上的复杂边界图形的分析,利用OpenGL的曲面绘制及曲面裁剪功能,提出了一种可以方便绘制平面图形的方法,按照这种思路,可以推广应用到任意平面上的平面图形绘制中,只需建立对应的平面坐标系即可。

Tags:绘制 图形