基本几何变换与图形剪裁现实

原创作品,出自 “晓风残月xj” 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj)。

由于各种原因,可能存在诸多不足,欢迎斧正!

一、实验课题

1.基本几何变换:平移、比例、旋转、对称和错切等;
2.直线段的裁剪;
3. 多边形的裁剪。

二、设计思想
1.基本几何变换
  基本几何变换:平移、比例、旋转、对称和错切等都是对应点的矩阵变换。

2.Liang-Barsky 直线段的裁剪
 推导
    直线的参数方程:
                             x=x1+u(x2 x1)
                             y=y1+u(y2 y1)
    其中, 0 u 1
    对于直线上一点( x, y , 若它在窗口内则有 :
                             wxl x1+u(x2 x1) wxr
                             wyb y1+u(y2 y1) wyt
    这样有:
                             u(x1 x2) x1 wxl ;      u(x2 x1) wxr x1
                             u(y1 y2) y1 wyb ;      u(y2 y1) wyt y1  
    令:
                              p1= (x2 x1) ;  q1=x1 wxl
                              p2=x2 x1 ;      q2=wxr x1
                              p3= (y2 y1) ;  q3=y1 wyb
                              p4=y2 y1 ;      q4=wyt y1
   则有: u*pk qk 
    2. 对于特殊位置直线的处理
    (1) 当直线与窗口边界 wxl wxr 平行时:
                           p3= (y2 y1) ;    q3=y1 wyb
                           p4=y2 y1 ;        q4=wyt y1
    求出参数值: u3=q3/p3 ,  u4=q4/p4 ,   uA= 0 ,  uB= 1 。则有:
                           umax=max(0, uk|pk<0)
                           umin=min(uk|pk>0, 1)
    (2) 当直线与窗口边界 wyb wyt 平行时:
                            p1= (x2 x1) ;    q1=x1 wxl
                            p2=x2 x1 ;        q2=wxr x1
     求出参数值: u1=q1/p1 ,  u2=q2/p2 ,   uA= 0 ,  uB= 1 。则有:
                           umax=max(0, uk|pk<0)
                           umin=min(uk|pk>0, 1)
     (3) 一般情况
 


   算法步骤
    (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) 利用直线的扫描转换算法绘制在窗口内的直线段。
    (7) 算法结束。 




3.Weiler-Atherton 多边形裁剪
 
    假定按顺时针方向处理顶点,且将用户多边形定义为 Ps ,窗口矩形为 Pw 。算法从 Ps 的任一点出发,跟踪检测 Ps 的每一条边,当 Ps Pw 相交时(实交点),按如下规则处理:
    (1) 若是由不可见侧进入可见侧,则输出可见直线段,转 (3)
    (2) 若是由可见侧进入不可见侧,则从当前交点开始,沿窗口边界顺时针检测 Pw 的边,即用窗口的有效边界去裁剪 Ps 的边,找到 Ps Pw 最靠近当前交点的另一交点,输出可见直线段和由当前交点到另一交点之间窗口边界上的线段,然后返回处理的当前交点;
    (3) 沿着 Ps 处理各条边,直到处理完 Ps 的每一条边,回到起点为止。 


三、实验特色
1.基本几何变换: 实现了 平移、比例、旋转、对称和错切等5 种变换,可以用菜单来响应用户指令 ;并给人以动态的效果,每一种变换都变动20 次,适当延缓
2.直线段的裁剪:任意直线用任意用户窗口来裁剪,其中直线、用户窗口由鼠标来响应;裁剪过程清晰可见。

3. 多边形的裁剪:任意多边形的裁剪任意窗口的裁剪,其中多边形、用户窗口由鼠标来响应,裁剪过程清晰可见。


.基本几何变换截图





Liang-Barsky直线段的裁剪截图



Weiler-Atherton多边形裁剪截图


具体代码见着这网址 http://download.csdn.net/detail/xj2419174554/6596371。

欢迎交流!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值