计算机图形学常用算法实现9 梁友栋-Barskey裁剪算法

本文介绍了Barskey裁剪算法,相对于Cohen-Sutherland算法更高效。算法通过参数方程表示直线,根据边界条件得到四个不等式,并简化判断。通过计算直线与边界的交点,确定直线在裁剪窗口内的部分。最终提供更新u的函数和画图函数,展示了在200x200到400x400区域的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个算法的效率比前面提到的Cohen-Sutherland要高
思路是把直线表示为参数方程形式,
x= x1+udx
y = y1+udy
由xmin<x<xmax
ymin<y<ymax
可以得到四个不等式,简化成同一个形式up<q 当p不等于0的时候,可以算出来u与边界的交点,p等于0的时候,左边等于0,只需简单的判断q的正负。
然后求直线和边界以及边界延长线的四个交点,u1取由外往内的两个交点的u值以及0的最大值
u2取由内往外的两个交点和1的最小值,得到的u1和u2就是直线两端点的坐标。
更新u的函数如下:

float u1 = 0;
float u2 = 1;
bool ClipT(int p, int q)
{
    float r;
    if (p < 0)
    {
        r = (float)q / p;
        if (r > u2)
            return false;
        if (r > u1)
            u1 = r;
    }
    else if (p > 0)
    {
        r = (float)q / p;
        if (r < u1)
            return false;
        if (r < u2)
            u2 = r;
    }
    else
        return q >= 0;
    return true;
}

画图函数如下:
代码中区域范围为(200,200)到(400,400)

voi
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值