本文主要是介绍计算机图形学(一):逐点比较法与直线、圆弧的插补生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
逐点比较法
逐点比较法就是在输出直线或圆弧的过程中,每走完一步就与理论的直线或圆弧进行比较,确定当前点是在线或弧上,还是在线或弧的一侧,然后再决定下一步的走向,这样一步一步地逼近所画直线或圆弧。
逐点比较法是针对笔式绘图机提出的。根据绘图机的结构原理及数字控制原理,绘图机的笔架可能的移动方向(称为走步方向)有八个:+X、-X、+Y、-Y、+X+Y、-X+Y、-X-Y、+X-Y。其中+X、-X、+Y、-Y四个走步方向是一般绘图机都提供的,称为基本走步方向。
可见,绘图机的基本绘图元素是与走步方向相对应的小直线段。绘图机所画的一般直线和曲线,实际上是由许多小直线段所组成的折线来逼近的。根据所画图线的已知条件(如直线两个端点坐标,圆弧的起点、终点和圆心等)计算画图所需要的一系列中间点(即折线的端点)的坐标,称为插补运算。根据插补对象不同,插补运算有直线插补、圆弧插补和抛物线插补等,前两种是基本的插补运算。插补运算可用软件或硬件实现,不少绘图机采用插补器(或称线发生器、弧发生器)来完成插补运算,目的在于提高图线生成速度。逐点比较法可用于插补运算。
直线的插补生成
若画第一象限的直线OA,起点为O(0,0),终点为A(xa,ya),设绘图笔当前的位置为K(xk,yk)。点K相对于直线OA的位置有三种情况:点K在OA上方,点K在OA上以及点K在OA下方。为了判断点K与OA的相对位置,引入偏差函数Fk:
因此,对第一象限内的直线生成规定如下:
即偏上了向右走;偏下了向上走。设▲x=1,则:
从而根据新偏差Fk+1的正负号再确定绘图笔的下一步走向。这样逐步进行,直至终点。终点判断的方法为:
以第一种方法为例:
设J为总走步数,则J=|xa|+|ya|
每走一步,J--,J==0时到达终点
对于其他象限内的直线线段,走向规定如下图所示:
偏差的递推公式,用|x|和|y|代替x和y:
例题:
圆弧的插补生成
偏差判别->坐标进给->偏差递推->终点判别
- 偏差判别
因此:Fi>0在圆外;Fi=0在圆上;Fi<0在圆内。
- 坐标给进
若逆时针,从A到B:
若顺时针,从B到A:
- 偏差递推
若逆时针,从A到B:
若顺时针,从B到A:
- 终点判别
其他线段的走向规定:
例题1:
运算过程:
例题2:
这篇关于计算机图形学(一):逐点比较法与直线、圆弧的插补生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!