第六节 裁 剪
     
 
  算法的程序实现如下:
函数L_Barsky实现算法
函数cansee用于判断直线段是否可见。
double xl, xr, yt, yb; (窗口位置)
void L_Barsky(double x0, y0, x2, y2)
{
double t0, t1, deltax, deltay;
t0=0.0; t1=1.0;
deltax=x2-x0;
if (!cansee(-deltax, x0-x1, t0, t1)) return;
if (!cansee(deltax, xr-x0, t0, t1)) return;
deltay=y2-y0;
if (!cansee(-deltay, y0-yb, t0, t1)) return;
if (!cansee(deltay, yt-y0, t0, t1)) return;
x2=x0+t1*deltax;
y2=y0+t1*deltay;
x0=x0+t0*deltax;
y0=y0+t0*deltay;
showline(x0, y0, x2, y2); //显示可见线段
}
bool cansee(double q, d, t0, t1)
{ double r;
if (q<0)
{ r=d/q;
if (r>tl) {cansee=false; return;}
else if (r>t0) t0=r;
}
else if (q>0)
{ r=d/q;
if (r<t0) {cansee=false; return;}
else if (r<t1) t1=r;
}
else if (d<0) {cansee=false; return;}
cansee=true;
}
 
上一页 | 下一页
  第一节 变换的数学基础
第二节 二维图形变换
第三节 二维视见变换
第四节 三维图形变换
第五节 投影
第六节 裁剪