Liang-Barshy算法实现

比较经典的裁剪算法了,现在也有很多的改进的算法。具体其他的请参见知网。我把实现的过程归纳了下。
这里写图片描述

称:Xleft和Ybottom为入边,Xright和Ytop为出边

直线参数方程:
x=x1+μ(x2-x1)
y=y1+μ(y2-y1)(0<=μ<=1,P1处为0,p2出为1)
将直线p1p2延长,并视这条直线具有方向,方向为左下到右上。与入边和出边各有两个交点

第一步:根据直线的参数方程,只要点在屏幕中央,则满足以下等式
Xleft<=x1+μ△X<=Xright
Ybottom<=y1+μ△y<= Ytop

令:P1=-△X            q1=x1-xleft
    P2=△X           q2=xright-x1
    P3=-△y          q3=y1-ybottom
    P4=△y           q4=ytop-y1

推导出:μPk≤qk(k=1,2,3,4)

带入P1,P2点求出P1,P2,P3,P4和q1,q2,q3,q4

第二步:判断△X
1) △X=0,即P1=P2=0
a) 如果q1<0&&q2<0,则舍去,不在窗口内部
b) 如果q1>=0,q2>=0,则计算μmax和μmin,判断if μmax<=μmin,代入参数方程,计算裁剪后的两个点

2) △y=0,则P3=P4=0
a) 如果q3<0&&q4<0,则不在窗口内
b) q3>=0,q4>=0,则计算μmax和μmin(μk=qk/Pk,pk!=0)
μmax=Max(0,μk|p<0)
μmin=Min(μk|pk>0,1)
if μmax<=μmin,则代入参数方程,计算裁剪后端点的值,得出裁剪后的线段

3) △X和△y都不为0的时候,Pk不为0,则计算μmax和μmin
μmax=入边两个交点的μ和0比较,取最大的值
μmin=出边的两个交点与1比较,取最小的值
if μmax<=μmin,则代入参数方程,计算裁剪后端点的值,得出裁剪后的线段的两个端点值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值