圆弧和椭圆弧的绘制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
T
di+1= b2(xi+2)2+a2(yi-0.5)2-a2b2 • => di+1- di= b2(2 xi+3)
• b)若di≥0,则Pi+1(xi+1,yi+1)应该选T (xi+1,yi-1),
di+1=b2(xi+1+1)2+a2(yi+1-0.5)2-a2b2
= b2(xi+2)2+a2(yi-1.5)2-a2b2 • =>di+1- di= b2(2 xi+3)-a2(2 yi-2)
di=b2(xi+1)2+a2(yi-0.5)2-a2b2
• a)若di<0(见右上图),则下一点Pi+1(xi+1,yi+1)应该 选S (xi+1,yi),
di+1=b2(xi+1+1)2+a2(yi+1-0.5)2-a2b2
= b2(xi+2)2+a2(yi-0.5)2-a2b2
PS
di=b2(xi+1)2+a2(yi-0.5)2-a2b2
Pi+1 Pi
O
角度DDA法产生椭圆弧
和角度DDA法产生圆弧类似
1)以角度为参数,写出椭圆弧的参数方 程。
2)按均匀的(角度)间隔,计算出椭圆 弧上点的坐标,用这些点(绘图时要对 坐标值取整)的连线来代替椭圆弧。
角度DDA法产生圆弧的算法使用了三角 函数和浮点运算,运算速度依然很慢, 与直线绘制算法相似,理想的圆绘制算 法也是只需要作一些简单的整数和判别 运算,常见的有中点画圆法
P S
y b |k|<1
O
a
|k|>1 x
P
T
ST
(a)
(b)
椭圆方程:
F(x,y)=b2x2+a2y2-a2b2=0
2)判别式的计算
PS T
先讨论|k|<1的情形(教材37页)。
设当前点Pi的坐标为(xi,yi),两个候选点为S(xi+1,yi) 和T(xi+1,yi-1),中点M(xi+1, yi-0.5),判别式为
3.2.2 圆的生成算法
为了方便起见,可以只考虑中心在原点、半径 为整数R的圆:
x2 y2 R2
圆上的点关于X轴、Y轴以及x=y,x=-y对称,只要实 现1/8圆的扫描转换就可以利用对称性得到完整的圆(8 对称点算法,圆心不在原点的处理见教材)。
最容易想到的算法如下:
根据圆的基本方程,可以沿x轴,x从0到 2R / 2 ,以 单位步长计算对应的y值来得到圆周上每点的位置:
问题: dt的选取
dt的一种取法
如图,设Pi(xi,yi)和Pi+1 (xi+1,yi+1)对应Hale Waihona Puke Baidu参数分别 为t和t+dt,显然,
|dx|=|xi+1-xi| =r|cos(t+dt)cost|=r|-sint’|dt≤r﹒dt
同理,|dy|=|yi+1-yi| ≤r﹒dt
为使|dx| ≤1 &&|dy| ≤1, 可取dt ≤1/r.
该算法每一步均包含浮点乘法和开方运算,且所绘 制的像素间间隔不一,随着x的增加,间隔越来越大。
一种消除不等间距的方法是使用极坐标来计算 圆周上的点——角度DDA法产生圆弧。
算法的要点
1)以角度为参数,写出圆弧的参数方程。 2)按均匀的(角度)间隔,计算出圆弧
上点的坐标,用这些点(绘图时要对坐 标值取整)的连线来代替圆弧。
中点画圆法的具体算法见教材
中点判别法生成椭圆
• 设椭圆的方程为: • 将其化为:
x2 a2
y2 b2
1
• F(x,y)=b2x2+a2y2-a2b2=0
由于椭圆
的对称性,我 们只讨论第1 象限椭圆弧的 生成。
y b |k|<1 O
|k|>1 ax
1)算法的要点 b |k|<1
y
i) |k|<1的情况
4) 由上半部分转入下半部分的判断
b2 2 x
a2 2 yy
0
y
b2 x a2 y
方法1:b2x<a2y?
方法2:求出椭圆上 y 1的点 (x, y)
x x
P
P
5) 下半部分的情S 形T S T
设P(xi,yi),则M(xi+0.5,yi-1),判别式: Di=F(xi+0.5,yi-1), a) 若Di≥0,则下一点选S( xi,yi-1 ), Di+1= Di +a2(-2yi+3) b) 若Di<0,则下一点选T( xi+1,yi-1 ), Di+1= Di +a2(-2yi+3)+b2(2xi+2)
椭圆方程: F(x,y)=b2x2+a2y2-a2b2=0
P
3) 判别式的初值 M
• 由于椭圆弧的起点P(0,b), 因 此,点M(1,b-0.5), 判别式
• d0=F(1,b-0.5) • =b2+a2(b-0.5)2-a2b2 • =b2+a2(-b+0.25)
椭圆方程: F(x,y)=b2x2+a2y2-a2b2=0
圆弧的参数方程
设以原点为圆心,半径R,圆弧的起始角ts, 终止角te,则参数方程为
x R cos t
y
R
sin
t
选取适当的角度增量dt,令t以步长dt从ts变到te, 总步数:n=(te-ts)/dt.
ti=ts+dt*i, i=0,1,…,n. 算出相应的圆弧上的点,画点(或连成线)即可。
O
设当前点为P(xp,yp), 则下一
点在两个候选点S(xp+1,yp)
和T (xp+1,yp-1)中选择。
判别规则: 设M为S 和T的中点
a)若M在椭圆内(上方), 则选S; P S
P
b)否则选T。
T
|k|>1 a x
S T
(a)
(b)
i) |k|>1的情况 设当前点为P(xp,yp), 则下一 点在两个候选点S(xp,yp-1) 和T (xp+1,yp-1)中选择。 判别规则: 设M为S 和T的中点 a)若M在椭圆内(左侧), 则选T; b)否则选S。
di+1= b2(xi+2)2+a2(yi-0.5)2-a2b2 • => di+1- di= b2(2 xi+3)
• b)若di≥0,则Pi+1(xi+1,yi+1)应该选T (xi+1,yi-1),
di+1=b2(xi+1+1)2+a2(yi+1-0.5)2-a2b2
= b2(xi+2)2+a2(yi-1.5)2-a2b2 • =>di+1- di= b2(2 xi+3)-a2(2 yi-2)
di=b2(xi+1)2+a2(yi-0.5)2-a2b2
• a)若di<0(见右上图),则下一点Pi+1(xi+1,yi+1)应该 选S (xi+1,yi),
di+1=b2(xi+1+1)2+a2(yi+1-0.5)2-a2b2
= b2(xi+2)2+a2(yi-0.5)2-a2b2
PS
di=b2(xi+1)2+a2(yi-0.5)2-a2b2
Pi+1 Pi
O
角度DDA法产生椭圆弧
和角度DDA法产生圆弧类似
1)以角度为参数,写出椭圆弧的参数方 程。
2)按均匀的(角度)间隔,计算出椭圆 弧上点的坐标,用这些点(绘图时要对 坐标值取整)的连线来代替椭圆弧。
角度DDA法产生圆弧的算法使用了三角 函数和浮点运算,运算速度依然很慢, 与直线绘制算法相似,理想的圆绘制算 法也是只需要作一些简单的整数和判别 运算,常见的有中点画圆法
P S
y b |k|<1
O
a
|k|>1 x
P
T
ST
(a)
(b)
椭圆方程:
F(x,y)=b2x2+a2y2-a2b2=0
2)判别式的计算
PS T
先讨论|k|<1的情形(教材37页)。
设当前点Pi的坐标为(xi,yi),两个候选点为S(xi+1,yi) 和T(xi+1,yi-1),中点M(xi+1, yi-0.5),判别式为
3.2.2 圆的生成算法
为了方便起见,可以只考虑中心在原点、半径 为整数R的圆:
x2 y2 R2
圆上的点关于X轴、Y轴以及x=y,x=-y对称,只要实 现1/8圆的扫描转换就可以利用对称性得到完整的圆(8 对称点算法,圆心不在原点的处理见教材)。
最容易想到的算法如下:
根据圆的基本方程,可以沿x轴,x从0到 2R / 2 ,以 单位步长计算对应的y值来得到圆周上每点的位置:
问题: dt的选取
dt的一种取法
如图,设Pi(xi,yi)和Pi+1 (xi+1,yi+1)对应Hale Waihona Puke Baidu参数分别 为t和t+dt,显然,
|dx|=|xi+1-xi| =r|cos(t+dt)cost|=r|-sint’|dt≤r﹒dt
同理,|dy|=|yi+1-yi| ≤r﹒dt
为使|dx| ≤1 &&|dy| ≤1, 可取dt ≤1/r.
该算法每一步均包含浮点乘法和开方运算,且所绘 制的像素间间隔不一,随着x的增加,间隔越来越大。
一种消除不等间距的方法是使用极坐标来计算 圆周上的点——角度DDA法产生圆弧。
算法的要点
1)以角度为参数,写出圆弧的参数方程。 2)按均匀的(角度)间隔,计算出圆弧
上点的坐标,用这些点(绘图时要对坐 标值取整)的连线来代替圆弧。
中点画圆法的具体算法见教材
中点判别法生成椭圆
• 设椭圆的方程为: • 将其化为:
x2 a2
y2 b2
1
• F(x,y)=b2x2+a2y2-a2b2=0
由于椭圆
的对称性,我 们只讨论第1 象限椭圆弧的 生成。
y b |k|<1 O
|k|>1 ax
1)算法的要点 b |k|<1
y
i) |k|<1的情况
4) 由上半部分转入下半部分的判断
b2 2 x
a2 2 yy
0
y
b2 x a2 y
方法1:b2x<a2y?
方法2:求出椭圆上 y 1的点 (x, y)
x x
P
P
5) 下半部分的情S 形T S T
设P(xi,yi),则M(xi+0.5,yi-1),判别式: Di=F(xi+0.5,yi-1), a) 若Di≥0,则下一点选S( xi,yi-1 ), Di+1= Di +a2(-2yi+3) b) 若Di<0,则下一点选T( xi+1,yi-1 ), Di+1= Di +a2(-2yi+3)+b2(2xi+2)
椭圆方程: F(x,y)=b2x2+a2y2-a2b2=0
P
3) 判别式的初值 M
• 由于椭圆弧的起点P(0,b), 因 此,点M(1,b-0.5), 判别式
• d0=F(1,b-0.5) • =b2+a2(b-0.5)2-a2b2 • =b2+a2(-b+0.25)
椭圆方程: F(x,y)=b2x2+a2y2-a2b2=0
圆弧的参数方程
设以原点为圆心,半径R,圆弧的起始角ts, 终止角te,则参数方程为
x R cos t
y
R
sin
t
选取适当的角度增量dt,令t以步长dt从ts变到te, 总步数:n=(te-ts)/dt.
ti=ts+dt*i, i=0,1,…,n. 算出相应的圆弧上的点,画点(或连成线)即可。
O
设当前点为P(xp,yp), 则下一
点在两个候选点S(xp+1,yp)
和T (xp+1,yp-1)中选择。
判别规则: 设M为S 和T的中点
a)若M在椭圆内(上方), 则选S; P S
P
b)否则选T。
T
|k|>1 a x
S T
(a)
(b)
i) |k|>1的情况 设当前点为P(xp,yp), 则下一 点在两个候选点S(xp,yp-1) 和T (xp+1,yp-1)中选择。 判别规则: 设M为S 和T的中点 a)若M在椭圆内(左侧), 则选T; b)否则选S。