例题:
P’’’1
P1’
P1
P1’’
P2
(1) 求左边交点,得P’1P2;
P’1:(-1,1/2); 编码(0000)
判别知非完全可见,且P’1在窗口内,
因此交换P’1P2得新线段P1P2;
P1:(1/2, 3/2);编码 (1000)
P2:(-1, 1/2); 编码 (0000)
P1:(-3/2, 1/6);编码 (0001) P2:(1/2, 3/2);编码 (1000)
线段完全可见,程序结束可编辑 Nhomakorabea件多边形的裁剪
可编辑课件
(2) 求右边交点,得 P’’1(1, 11/6) P2(-1, 1/2); 并编码, 判别之不可见
x=x1+(y-y1)*(x2-x1)/(y2-y1) y=y1+(x-x1)*(y2-y1)/(x2-x1)
(3) 求上边交点,得 P’’’1(-1/4, 1) P2(-1, 1/2); 并编码,
两端点编码全部为0,
如何求窗口边界与线段P1P2的交点?
如何判定线段应该与窗口的哪条边求交呢?
编码中对应位为1的窗口边。
计算线段P1(x1,y1)P2(x2,y2)与窗口边界的交点 Code代表线段某个端点的编码。 if(LEFT&code !=0)
{ x=XL; y=y1+(y2-y1)*(XL-x1)/(x2-x1);} else if(RIGHT&code !=0) { x=XR; y=y1+(y2-y1)*(XR-x1)/(x2-x1);} else if(BOTTOM&code !=0) { y=YB; x=x1+(x2-x1)*(YB-y1)/(y2-y1);} else if(TOP & code !=0) { y=YT; x=x1+(x2-x1)*(YT-y1)/(y2-y1);}