第三章 输出图元 output primitives. 图形输出的概念 算法:几何图形...

32
第第第 第第第第 Output Primitives

Post on 21-Dec-2015

457 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

第三章 输出图元

Output Primitives

Page 2: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

图形输出的概念• 算法:几何图形 点阵设备与 画线设备点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机 • 坐标系 世界坐标系 设备坐标系 本章主要介绍二维图元的算法点 直线 圆 曲线 填充域

●●●●

●●

变换

Page 3: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

• 画线算法 实质:求二端点之间的所有的近似点

y = m * x + b由于 m 不一定是整数,所以就要求哪一个像素最接近直线

b

x

y

●●●●

●●

Page 4: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

增量法• y=mx+bm 为斜率, b 为截距,设二端点分别为( x1,y1),( x2,y2) ∆y=y2- y1 , ∆ x =x2-x1

m= ∆y/ ∆x 对于任意的 δy,δy=mδx 则 δx=δy/m讨论:︱ m ︱ <1 由 δx定 δy的偏转电压 ︱ m ︱ >1 由 δy定 δx的偏转电压

Page 5: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

DDA 算法Digital Differential Analyzer

• y=mx+b m 为斜率, b 为截距,设二端点分别为( x1,y1),( x2,y2)

∆y=m ∆x• 若 0<m≤1, ∆设 x= 1,则 xk+1=xk+1, yk+1=yk+m (取整)• 若m>1 ∆,设 y= 1,则 yk+1=yk+1 xk+1=xk+1/m, • 以上推导是基于自左向右划线,若自右向左划线, 若 0<m≤1 ∆可设 x=- 1 yk+1=yk - m 若m>1 ∆, y =- 1 , xk+1=xk - 1/m, • 若m<0, 分 |m|<1 和 |m|>1 两种情况讨论之。• 程序示例

Page 6: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

中点划线算法• 线段二端点( x0,y0),(x1,y1);m<1,P(xp,yp) 已定M 为 p1,p2 的中点; M ( xp+1 , yp+0.5 ) M 在 Q 的下方,应取 P2 ( xp+1 , yp+1 ) M 在 Q 的上方,应取 P1 ( xp+1 , yp ) 考查一次函数 F(x,y)=ax+by+c

a=y0-y1 b=x1-x0,c=x0y1-x1y0

对任一点( x,y ) , 若 F(x,y)=0 ,点 (x,y) 在直线上 ; F(x,y)>0 ,点 (x,y) 在直线上方 ; F(x,y)<0 ,点 (x,y) 在直线下方 ;

令 d=F(M)=a(xp+1)+b(yp+0.5)+c

d<0,M 在直线的下方,取 P2 点 ( 只与 d 的符号有关) d>0,M 在直线的上方,取 P1 点

P(xp,yp)

Q

P1

P2

M

·

●M1

M2

Page 7: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

中点划线算法(续)• 求 d 的增量 若取 P1 点, d1=F(xp+2 , yp+0.5)=a(xp+2)+b(yp+0.5)+c=d+a

若取 P2 点, d2=F(xp+2 , yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b

• 初始时: d0=F(x0+1 , y0+0.5)=F(x0 , y0)+a+0.5b=a+0.5b

• 以 2d 代 d, 算法:

1. d0=2*a+b

2. di 0 (≧ 取 P1), xi+1=xi+1, yi+1=yi, di+1=di+2a

di<0 ( 取 P2), xi+1=xi+1, yi+1=yi+1, di+1=di+2(a+b)

3. 重复 2 ,直到 xi+1≧x1.

斜率 |m|<1,>1…… 中点取法 例题 P1 (0,0) P2 (5,2)

M

Page 8: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

圆的位图

Page 9: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

中点画圆算法• 圆的特征 ( x-xc)2+ ( y-yc)2 =r2

直接计算,计算量大,点间距不一致• 圆的八对称性 考虑点( 0 , r )右下方的 1/8 圆周

• 中点圆算法 算法思想:

f(x,y)=x2+y2-r2

M ( xk+1,yk-0.5 )

pk =f(M ) =f(xk+1,yk-0.5)= (xk+1)2+(yk-0.5)2- r2

pk+1=f(xk+1+1,yk+1-0.5)= (xk+1+1)2+(yk+1-0.5)2 -r2

=pk+2(xk+1)+(yk+12- yk

2)- (yk+1- yk)+1

if (pk<0) yk+1=yk xk+1=xk+1 pk+1= pk+2(xk+1)+1= pk+2xk+1+1

if (pk>=0) yk+1= yk-1 xk+1=xk+1 pk+1=pk+2xk+1+1-2yk+1

=pk+2xk+1 -2yk+1 +1

( 2xk+1= 2xk+2; 2yk+1= 2yk- 2)

p0=f(1,r-0.5)=1+(r-0.5)2-r2=1.25-r = 1-r

(if r is an integer)

yk

yk-1

xk

xk+1

M

xk+2

f

Page 10: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

中点画圆算法步骤

1. 输入( xc , yc ), r, 画第一个点( 0 , r), p0=1-r

2. if (pk<0) yk+1=yk xk+1=xk+1 pk+1=pk+2xk+1+1

3. if (pk>=0) yk+1= yk-1 xk+1=xk+1 pk+1=pk+2xk+1 -2y

k+1 +1

4. 确定其他七个八分圆中的对称点

5. 平移 x=x+xc y=y+yc ;画点

6. 重复 2 到 5 ,直至 x y≧

Page 11: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

中点画圆算法例题

• r=10, 圆心( 0 , 0 ) ,

画( 0 , 10 ) p0=1-10=-9<0

Page 12: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

椭圆生成算法• 椭圆的方程

• 参数方程表示 x=xc+rxcosθ

y=yc+rysinθ• 平移坐标轴,使椭圆中心位于原点 x=rxcosθ

y=rysinθ• 角度 DDA算法

(xc,yc)

rx

ry

2 2

2 2

( ) ( )1c c

x y

x x x y

r r

θ

Page 13: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

中点画椭圆算法• 椭圆方程 ry

2x2+ rx2y2=rx

2ry2

设 f(x,y)= ry2x2+ rx

2y2 - rx2ry

2

• x,y 方向的切矢量相等 2ry2x=2rx

2y ,此处的切线斜率为 -1 ,以此方法将椭圆划分为 2 区域

当 2ry2x≧2rx

2y 时,移出区域 1• 区域 1:2ry

2x < 2rx2y, 每次 x 走步,判别 y 是否走步

• 区域 2:2ry2x≧2rx

2y, 每次 y 走步,判别 x 是否走步• f(x,y) 为决策函数 <0 (x,y) 在椭圆内 f(x,y) =0 (x,y) 在椭圆上 >0 (x,y) 在椭圆外

22 y

fr x

x

22 x

fr y

y

Page 14: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

中点画椭圆算法(续)

• 区域 1 : x 每次都走步 中点 m(xk+1,yk-0.5), 判别函数 P1k=ry

2(xk+1)2+rx2(yk-0.5)2-rx

2ry2

P1k 0,m≦ 在椭圆内,选 (xk+1,yk) ① P1k>0,m 在椭圆外,选 (xk+1,yk-1) ②

• 对① P1k+1=ry

2(xk+1+1)2+rx2(yk+1-0.5)2-rx

2ry2

⊿=P1k+1-P1k=2ry2 (xk+1)+ry

2+rx2[(yk+1-0.5)2-(yk-0.5)2]

yk+1= yk =2r⊿ y2 (xk+1)+ry

2

对② yk+1= yk -1 =2r⊿ y2 xk+1+ry

2 -2rx2yk+1

Page 15: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

中点画椭圆算法(续)• 初始时( 0 , ry ) 2 ry

2x=0; 2 rx2y= 2 rx

2ry

之后 x 的增量 2 ry2 ; y 的增量或为 -2 rx

2 或为 0 ,

当 2ry2x≧2rx

2y 时,移出区域 1

• P10=f(1,ry-0.5)=ry2-rx

2 (ry-0.5)2-rx2ry

2

区域 1 讨论结束• 区域 2 : 中点 m(xk+0.5 , yk-1)

P2k=ry2(xk+0.5)2+rx

2(yk-1)2-rx2ry

2

P2k 0,m≦ 在椭圆内,选 (xk+1,yk-1) ① P2k>0,m 在椭圆外,选 (xk,yk-1) ② P2k+1=ry

2(xk+1+0.5)2+rx2(yk+1-1)2-rx

2ry2

⊿=P2k+1-P2k=ry2[(xk+1+0.5)2- (xk+0.5)2] -2rx

2 (yk-1)+rx2

Page 16: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

中点画椭圆算法(续)• 对 ① xk+1= xk +1

⊿=2ry2 xk+1-2rx

2+rx2

• 对② xk+1=xk

⊿=-2rx2 yk+1+rx

2

• 初始点取区域 1 的最后位置 (x0,y0)

P20=f(x0+0.5,y0-1)=ry2(x0+0.5)2+rx

2(y0-1)2 -rx2ry

2

• 也可以从( rx , 0 )开始,逆时针方向直到区域 1

Page 17: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

例:中点画椭圆算法•

Page 18: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

Page 19: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

圆锥曲线

• 一般方程 Ax2+Bxy+Cy2+Dx+Ey+F= -40 (P95 有错) <0 圆、椭圆 B2-4AC=0 抛物线 >0 双曲线例子: A=C=1 B=0 , D=-2xc,E=-2yc,F=xc2+yc

2-r2

Page 20: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

填充区域( fill area) 图元• 对一封闭区域用某种颜色或图案进行填充;• 区域边界:规则的、不规则的曲线边界、封闭折

线• 一般用多边形填充;曲面可用平面逼近• 曲线边界

Page 21: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

多边形填充区域• 多边形的分类 凸( convex) 多边形 (边的延长线) 凹( concave )多边形 退化 (degenerate) 多边形 共线、共点

<180º>180º

Page 22: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

凹多边形识别• 多边形的边向量叉积, Z 分量 <0

• 步骤: 多边形的向量表示求叉积判断 Z 分量 <0者,延长其一边与多边形交于一点,将多边

形分为二部分

Page 23: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

例 3.4 分割凹多边形E1 = ( 1 , 0 , 0 ) E2 = ( 1 , 1 , 0 ) E3 = ( 1 , -1 , 0 ) E4 = ( 0 , 2 , 0 ) E5 = ( -3 , 0 , 0 ) E6 = ( 0 , -2 , 0 )求叉积E1 ×E2= ( 0 , 0 , 1 )E2 ×E3= ( 0 , 0 , -2 ) E3 ×E4= ( 0 , 0 , 2 ) E4 ×E5= ( 0 , 0 , 6 ) E5 ×E6= ( 0 , 0 , 6 ) E6 ×E1= ( 0 , 0 , 2 )分割

3

1

2

1

02

3

3

E3

E6

E5

E4

E1

E2

E3

E3

Page 24: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

凸多边形分割成三角形集1. 将多边形三个连续的顶点定义为一个新三角形;2. 删去中间一个顶点,组成新多边形3. 重复 1 , 2 ;直到只剩下三个顶点,即为最后

一个三角形。

Page 25: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

内外测试法

判别区域内外

• 奇偶规则 由任意一点 P 向对象引射线,统计沿射线与各边的交点,若为奇

数,则 P 为内部点,若为偶数, P 为外部点。• 非零绕数规则 多边形按逆时针方向定义,点 P引射线同上,沿射线方向,多边

形边从右到左通过射线时,绕数 +1,反之,绕数 -1 ,若绕数非零,则 P 为内部点,否则, P 为外部点。

特例:上图,二法不同的结果。

Page 26: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

非零绕数算法的实现• P 点出发的向量定义为 u, 边向量定义为 E, 若 u×E, +z方向,绕数 +1, -z方向,绕数 -1。• 点积代叉积:设 u(ux,uy),与 u正交的向量 u+为

(-uy,ux), 若 u+ •E 绕数 +1,否则,绕数 -1。定义两区域的并、交、差 并 正边界方向,绕数为正的点; 交 正边界方向,绕数 >1的点 ; 差 A-B,A正边界方向, B负边界方向,绕数为正的点

Page 27: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

多边形表面 polygon surfaces

• 顶点表: vertex V1 : x1,y1,z1

V2 : x2,y2,z2

V3 : x3,y3,z3

V4 : x4,y4,z4

V5 : x5,y5,z5

• 边表: edge E1 : V1 , V2 E2 : V2 , V3

E3 : V1 , V3 E4 : V3 , V4

E5 : V4 , V5 E6 : V5 , V1

• 面表: surface S1 : E1 , E2 , E3 S2 : E3 , E4 , E5 , E6

四点以上有可能不共面

V1

V2

V3

V4

V5

E1E6

E2

E3

E4

E5

Page 28: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

• 平面方程 equation of plane surface Ax+By+Cz+D=0三点确定一个面时

1 y1 z1 x1 1 z1

A= 1 y2 z2 B= x2 1 z2

1 y3 z3 x3 1 z3

x1 y1 1 x1 y1 z1

C= x2 y2 1 D= - x2 y2 z2

x3 y3 1 x3 y3 z3

Page 29: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

• 法向量 (A , B , C)平面内外侧判定: Ax+By+Cz+D < 0 内侧 Ax+By+Cz+D > 0 外侧已知平面上三点 v1,v2,v3, 计算法向量 N

• N=(v2-v1)×( v3-v1)

• 平面方程的向量形式 N•P=-D

Page 30: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

填充函数单元阵列

• 填充函数 FillArea(n,WcVertices )• 单元阵列 Cell Array

填充一个二维的网格图案

Page 31: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

研究生高级计算机图形学课题设计1. 写一篇三维造型方面的论文,要求不少于 3000字,独立完成。内容可以是以下几方面:

2. 绘制一个具有真实感的三维场景,其中至少含有2 个三维物体。可以使用 OpenGL 或其他函数库,要求独立完成从建模、坐标变换到消隐算法、光照模型、面绘制算法、纹理映射的全部过程。

3. 计算机图形学理论或算法的研究。如:曲线、曲面拟合算法;并行面绘制算法;特定物体表面的纹理映射算法。

4. 分形几何造型的研究。如:分形树、分形山、树木、花草、云、瀑布等。

5. 科学计算的可视化。可将计算数据、物理、化学现象或其他自然现象的观察数据进行三维空间的可视化。

6. CAD 或其他应用研究。7. 图形、图像、动画方面的研究

Page 32: 第三章 输出图元 Output Primitives. 图形输出的概念 算法:几何图形 点阵设备与 画线设备 点阵设备:显示器光栅矩阵( XY) ,如何生成 划线设备:笔式绘图机

End of Chapter 3