左p1=×1-×2q1=X1-WX 右p2=×2-×1q2=WXr 下p3=y1y2q3=y1-Wyb 分析:裁剪的本质 上p4=y2-y1q4=Wyt-y1 假定Pk不为0 1 对于|1J U=max(0, ukIpk<o,uk|pk<0)PP小于0U在0、U1、U取大者 U+wo=min(1, uklpk0,up 4p0)P2、P大于0U在1、U2、U取小者 如果Uone≤Utw取可求得两端点
分析:裁剪的本质 Uone=max(0,uk|pk<0,uk|pk<0) Utwo=min(1,uk|pk>0,uk|pk>0) I1 J1 对于I1J1 P1、P4小于0 U在0、U1、U4取大者 P2、P3大于0 U在1、U2、U3取小者 如果Uone≤ Utwo取可求得两端点 左p1 = x1-x2 右p2 = x2-x1 下p3 = y1-y2 上p4 = y2-y1 q1 = x1 – wxl q2 = wxr – x1 q3 = y1 – wyb q4 = wyt – y1 假定PK不为0
左p1=×1-×2q1=X1-WX 右p2=×2-×1q2=WXr 下p3=y1y2q3=y1-Wyb 如果UneU+w表明什么? 上p4=y2-y1q4=Wyt-y1 1 1 one max(0,uklk0, unIpue0)P1、P小于0U在0、U、U3取大者 Utw。=min(1 kpk>0, lpl P2、P大于0U在1、U2、U取小者
左p1 = x1-x2 右p2 = x2-x1 下p3 = y1-y2 上p4 = y2-y1 q1 = x1 – wxl q2 = wxr – x1 q3 = y1 – wyb 如果 q4 = wyt – y1 Uone> Utwo表明什么? P1、P3小于0 U在0、U1、U3取大者 P2、P4大于0 U在1、U2、U4取小者 Uone=max(0,uk|pk<0,uk|pk<0) Utwo=min(1,uk|pk>0,uk|pk>0) I1 J1
左p1=×1-×2q1=X1-WX 右p2=×2-×1q2=WXr 下p3=y1y2q3=y1-Wyb 特殊处理为0 上p4=y2-y1q4=Wyt-y1 C yt yt F H B A K D W wXl E WXr wX I WXI (a)直线段与窗口边界 (b)直线段与窗口边界 wx1和wxr平行的情况 Wyb和wyt平行的情况 p1=p2=0 Uone=max(o, uklpko U+wo-min(1, ukl pk>o) 3-4
特殊处理: (a)直线段与窗口边界 wxl和wxr平行的情况 (b)直线段与窗口边界 wyb和wyt平行的情况 wyt wyb wxl wxr wxl wxr wyb wyt A B C D E F G H I J K L PK为0 p1=p2=0 p3=p4=0 Uone=max(0,uk|pk<0) Utwo=min(1,uk|pk>0) 左p1 = x1-x2 右p2 = x2-x1 下p3 = y1-y2 上p4 = y2-y1 q1 = x1 – wxl q2 = wxr – x1 q3 = y1 – wyb q4 = wyt – y1
算法步骤: (1)输入直线段的两端点坐标:(x1,y1)和(x2,y2),以及窗 口的四条边界坐标:wyt、wyb、Wx|和wxr (2)若△x=0,则p1=p2=0。此时进一步判断是否满足q1<0或 q2<0,若满足,则该直线段不在窗口内,算法转(7)。 否则,满足q1>0且q2>0,则进一步计算u1和u2。算法转 (5)。 (3)若△y=0,则p3p4=0。此时进一步判断是否满足q3<0或 a4<0,若满足,则该直线段不在窗口内,算法转(7)。 否则,满足q1>0且q2>0,则进一步计算u1和U2。算法转 (5)。 (4)若上述两条均不满足,则有p≠0(k=1,2,3,4)。此 时计算u和u2 (5)求得u和u2后,进行判断:若u1>u2,,则直线段在窗口 外,算法转(7)。若u1<u2,利用直线的参数方程求得直 线段在窗口内的两端点坐标
算法步骤: (1)输入直线段的两端点坐标:(x1 ,y1 )和(x2 ,y2 ),以及窗 口的四条边界坐标:wyt、wyb、wxl和wxr。 (2)若Δx=0,则p1 =p2 =0。此时进一步判断是否满足q1 <0或 q2 <0,若满足,则该直线段不在窗口内,算法转(7)。 否则,满足q1 >0且q2 >0,则进一步计算u1和u2。算法转 (5)。 (3)若Δy=0,则p3 =p4 =0。此时进一步判断是否满足q3 <0或 q4 <0,若满足,则该直线段不在窗口内,算法转(7)。 否则,满足q1 >0且q2 >0,则进一步计算u1和u2。算法转 (5)。 (4)若上述两条均不满足,则有pk≠0(k=1,2,3,4)。此 时计算u1和u2。 (5)求得u1和u2后,进行判断:若u1 >u2,则直线段在窗口 外,算法转(7)。若u1 <u2,利用直线的参数方程求得直 线段在窗口内的两端点坐标。 (6)利用直线的扫描转换算法绘制在窗口内的直线段。算
、试用|iang- bar sky算法裁剪图中的线段AB 解: 直线段AB的参数方程为: A(3,3) x=3+u(-2-3) y=3+u(-1-3)0≤u≤ 窗口 即 x=3-5u(0≤u≤1) 3-4u X 这里 wx=0, wXr=2 B(-2,-1) wyb=o, wyt=2 p1=×1-×2=5>0 q1= 1-wX p2=X2-×1=-5<0 q2=WXr-×1=-1 因此 3 =4>0 b=3 p4=y2y1=-4<0可见P均不为0q4=Wyt-y1=-1
窗口 B(-2,-1) A(3,3) x y x=3+u·(-2-3) y=3+u·(-1-3) 0 ≤ u ≤ 1 即: x=3-5u y=3-4u 这里: wxl=0,wxr=2 wyb=0,wyt=2 (0 ≤ u ≤ 1) 解: 直线段AB的参数方程为: p1 = x1-x2=5>0 p2 = x2-x1 =-5<0 p3 = y1-y2 =4>0 p4 = y2-y1 =-4<0 可见P均不为0 因此: q1 = x1 – wxl=3 q2 = wxr – x1=-1 q3 = y1 – wyb=3 q4 = wyt – y1=-1 1、试用liang-barsky算法裁剪图中的线段AB