梁友栋-Barsky算法

[计算机图形学经典算法] Liang-Barsky(梁友栋-Barsky) 算法 (附Matlab代码) 刚学习了计算机图形学这门课程,为奠定根基的算法所倾倒,特此记录一二。 Liang-Barsky(梁友栋-Barsky) 梁友栋,福建福州人,1956-1960年,复旦大学,师从苏步青先生,80年代初,提出了Liang-Barskey裁剪算法,1984-1990年任浙江大学数学系主任。1991年,梁友栋先生获国家自然科学三等奖,学生谭建荣、汪国昭、王国瑾、鲍虎军、马利庄第二届“中国几何设 阅读详情

 梁友栋-Barsky算法

 

  • 此算法的主要特色

    • 把二维裁剪的问题化成二次一维裁剪问题,而把裁剪问题转化为解一组不等式的问题;

    • 改善了Cohen-Sutherland 的编码算法中全部摒弃的判断只适合于那些仅在窗口同一侧(或左、或右、或上、或下) 线段的不足。

    算法分成一维和二维两部分,前者是后者的基础。

  • 一维裁剪

    • 一维裁剪的本质是求取2条线段的公共部分。

      一维裁剪算法原理示意图

      • 线段P1P2与一维窗口W1W2的位置分布(未列出重端点状况)

    • 设W1W2为一维窗口,P1P2是给定的线段,则P1P2在一维窗口W1W2内的可见部分为:

          S=W1W2∩P1P2

      令w1,w2和x1,x2分别为W1,W2和P1,P2点的坐标,则P1P2至少部分可见的充要条件是:

          max(min(x1,x2), min(w1,w2))≤ min(max(x1,x2), max(w1,w2)) 

      (假设线段和窗口均从左至右排列,可简写为:max(x1 , w1) ≤ min(x2,w2) )即

      • 线段和窗口:左端点中大者≤右端点中小者
         

  • 二维裁剪

    • 二维裁剪算法的本质是如何把二维裁剪的问题化成二次一维裁剪。

      设二维窗口为下列方程所确定:

          x=XL
          x=XR (记XL≤x≤XR的区域为Δx)
          y=YB
          y=YT (记YB≤y≤YT的区域为Δy)
       

      则平面上任意线段P1P2在窗口内的部分为:

          P1P2∩Δx∩Δy

      设通过P1P2的直线与窗口左、右、上、下边界的交点分别为L、R、B、T,则P1P2可见部分亦可表为:

          P1P2∩LR∩BT


       

    • 当直线垂直时

      • xp1=xp2
         

        且XL≤xp1≤XR时,P1P2∩LR∩BT 等价于求P1P2∩BT;
         

    • 当直线平行时

      • yp1=yp2
         

        且YB≤yp1≤YT时,P1P2∩LR∩BT 等价于求P1P2∩LR; 
         

    • 线段P1P2既不平行于窗口垂直边界,也不平行于窗口水平边界时

      • 即当xp1≠xp2,且yp1≠yp2

        • L、R、B、T都是确定的
           

        • P1P2的斜率k=( yp2-yp1)/ ( xp2-xp1)为非零或非奇异值。

              xB= xp1 +(YB- yp1)/k;
              xT= xp1 +(YT- yp1)/k;

          且  xB <xT,当k>0;
              xT <xB,当k<0。

        令
            X1= max(xL,min(xp1,xp2))
            X2= min(xR,max(xp1,xp2))

        则P1P2∩LR为非空集合的充要条件是:

            X1≤X2(按照:max(x1 , w1) ≤ min(x2,w2))

        此时线段P1P2与窗口在X轴方向的公共部分就是:

            [X1,X2]

        而P1P2∩LR∩BT为非空集合的充要条件为:

            max(X1, min(xB , xT))≤min(X2, max(xB , xT))
         

      • 它等价于下列三个不等式
         

        • X1≤X2 
          X1≤max(xB , xT)
          min(xB , xT)≤X2
           

      • 三个不等式又等价于如下两组不等式

        • X1≤X2 (1)          X1≤X2
          X1≤xT (2) (k>0)   X1≤xB(k<0)
          xB≤X2 (3)          xT≤X2
           

      • 当上述两组不等式中有任何一个不满足时,线段和窗口不可能有公共部分。
         

      • 试观察上述三个不等式的几何意义
         

        • 设k>0
           

        • 式(1)X1>X2
           

          • P1P2∩LR的交集为空,即P1P2∩Δx为空,

            此时P1P2, 或在窗口左边界x=XL的左侧,或在窗口右边界x=XR的右侧


             

        • 式(2)X1>xT

          • 此式意味着max(xL,min(xp1,xp2))>xT

            它相当于:xL>xT, 或min(xp1,xp2)>xT

            k>0时,当xL>xT ,通过P1P2的直线与窗口上边界的交点T(xT)在窗口左边界的左侧,如a所示

            而min(xp1,xp2)>xT等价于:xp1>xT,或xp2>xT,表示线段P1P2在窗口上边界的上方,如b所示
             

        • 式(3)xB>X2

          • 同理可知xB>X2表示直线穿越窗口下边边界y=YB和右边边界x=XR (图中c),或是P1P2在y=YB的下方(图中d)


             

        • 当k<0时

          • 当k<0时,线段与窗口的位置也有对应的4种情况

            这个方法增加了跨越三个区域的直线段(a和c状态)的快速拒绝判定。

            这些状态用Sutherland的编码法是不能一次予以解决的(它只能快速拒绝判定b和d)。


             

  • 二维裁剪算法的实施

    • 当上述三个条件不全满足,那么线段P1P2至少是部分在窗口内部。此时,若k>0,则可见部分的端点为:

      当k<0时,只要交换YB和YT,表中所列结论均适用。


      转载  http://cg.sjtu.edu.cn/lecture_site/chap3/main.htm

 

 


Liang-Barsky直线段剪裁算法 这是我在图形学课上用MFC带窗口的界面编写的直线段Liang-Barsky剪裁算法 算法准确 注释清晰 供大家分享 立即下载

相关推荐

梁友栋-barsky算法

用梁友栋-barsky算法或者中点分割法等其它算法(除cohen-sutherland直线裁剪算法外)实现直线段相对于给定窗口的裁剪。 采用C/C++ 、OpenGL编写程序(参考所提供的程序代码clip.cpp及第一次实验提供的建立Project的过程说明)。

梁友栋-Barsky裁剪算法

Cyrus和Beck用参数化方法提出了比Cohen-Sutherland更有效的算法。后来梁友栋和Barsky独立地提出了更快的参数化线段裁剪算法,也称为Liany-Barsky(LB)算法。      一、梁友栋-Barsky裁剪算法思想:   我们知道,一条两端点为P1(x1,y1)、P2(x2,y2)的线段可以用参数方程形式表示:   x= x1+ u·(x2-x1)

Marcnuth's 2万+

Matlab双目相机标定

1 概述 现在有许多双目相机在出厂时就已经标定好了,用户拿到手后可以直接使用,例如Intel Realsense系列。但是有些相机出厂的时候并没有完成标定工作,因而这个时候就需要我们自己来标定。由于笔者曾改装过一个双目相机,最远可以测至50m,因此有一定的心得体会想给大家分享一下。本文主要介绍双目相机标定的整个过程,以及导出标定数据的方法。 相机标定主要分为手动标定和自动标定,手动标定比较繁琐,这里主要介绍基于matlab工具箱的自动标定方式来对双目相机进行标定。具体的相关标定细节也可以参照这篇博客:m

weixin_46133643的博客 2万+

梁友栋-Barsky裁剪算法原理分析

梁友栋-Barsky算法是一种参数线裁剪算法。 为两个参数方程,为两点的差值,其中的由来是整理参数方程中三角函数的值得出,因为取值需要在裁剪框内,所以u只需要取0~1范围内的就足够。 是结合四条边界线得出的组合方程,在参数方程中,得到u的值就可以得出最终的解,所以在上面式子中其他的量都可以抽象化,就可以得出他的 在这里p和q都是抽象表示,由于不等式是与四条边界线结合得出,所以p和q的具体定义则为: 用x边界线举例说明,如果是左边界线,p的末端点大于初始点,p的值为

qq_39144730的博客 3870

心电图机原理及电路超详细讲解

前置心电放大电路(虚线框:这是隔离电路的分界,在隔离电路分析中知道,完整隔离包括信号隔离(脉宽调制)、控制信号隔离(光电耦合)和电源隔离)后级放大电路。

fcxgfdjy的博客 2万+

ADS负载牵引仿真避坑指南:从零开始搞定Loadpull模板设置

本文是一份针对ADS负载牵引仿真的深度避坑指南,详细解析了Loadpull模板从初始化配置到结果解读的全过程。文章重点阐述了如何根据设计目标灵活设置扫描圆、采样点等关键参数,以解决仿真不收敛、结果不完整等常见问题,并指导读者在功率与效率之间做出理性权衡,最终提取出用于匹配网络设计的最优负载阻抗。

weixin_29234423的博客 594

梁友栋-Barsky算法原理

此算法的主要特色 把二维裁剪的问题化成二次一维裁剪问题,而把裁剪问题转化为解一组不等式的问题; 改善了Cohen-Sutherland 的编码算法中全部摒弃的判断只适合于那些仅在窗口同一侧(或左、或右、或上、或下) 线段的不足。     算法分成一维和二维两部分,前者是后者的基础。 一维裁剪 一维裁剪的本质是求取2条线段的公共部分。 一维裁剪

希望记录下自己的一点一滴,慢慢成长。。 6646

IAR9.20.4安装与注册全攻略:附资源及典型问题解决方案

本文提供IAR9.20.4的详细安装与注册指南,涵盖环境准备、安装步骤、权限设置及注册机使用技巧。针对典型问题如评估版残留、权限不足和杀毒软件拦截等,给出了具体解决方案,帮助用户顺利完成IAR开发环境的搭建与激活。

a2b3c4d5e的博客 295

梁友栋-Barsky算法(

直线的裁剪: 梁友栋-Barsky算法(Liang-Barsky算法) 1. 算法的基本思想 以直线的参数方程为基础,对不同情况下的裁剪求得相应的参数值。 2. 算法的推导过程 情形一   pk=0 (1)p1=p2=0 若q1 若q1>=0且q2>=0,则进一步判断      u=qk/pk(k=3,4) 令   u1=max(0,u|pk      u2=min(1,u|p

3852

从硬件到软件:TSMaster报文过滤全链路配置指南(含同星设备适配)

本文详细介绍了TSMaster平台下CAN/LIN/FlexRay总线的报文过滤全链路配置指南,特别针对同星TC1016等硬件的兼容性进行实战演示。从硬件层预过滤到软件层可编程过滤,提供五维过滤体系构建方法,帮助工程师提升车载诊断与总线分析效率。重点解析混合总线过滤策略优化及诊断场景下的特殊过滤方案。

tensorflowjs6的博客 401

Geant4学习——入门(基本概念、Geant4工具包的结构、强制类、可选类)

Geant4是由欧洲核子研究组织基于C++面向对象技术开发的蒙特卡罗应用软件包,用于模拟粒子在物质中输运的物理过程。由于具有良好的通用性和扩展能力,Geant4在涉及微观粒子与物质相互作用的诸多领域获得了广泛应用。 第一部分 Geant4的基本概念 HEP中的模拟是“虚拟现实”。仿真既可用于在研发阶段帮助设计探测器,又可用于物理研究中了解探测器的响应。为了创建这样的虚拟现实,我们需要对粒子间的相互作用,几何形状和材料进行建模,以便将基本粒子传播到检测器中。我们还需要描述检测器生成原始数据的灵敏度。 Gea

M_M-铭的博客 2万+

理解梁友栋-Barsky裁剪算法

学习图形学窗口裁剪算法时,很多教材只是对梁友栋-Barsky裁剪算法过程做了简单的介绍,并没有对原理过多的解释。老而学者如秉烛夜行,用了两三天时间终于搞明白算法原理。 消除指定区域内或区域外的图形部分的过程称为裁剪。在一维裁剪窗口中,线段与裁剪窗口的关系如下图所示 假设点P1P2W1W2的横坐标分别是x1,x2,w1,w2,线段P1P2与蓝色裁剪窗口W1W2(蓝色的线之间)的存在公共部分(

Daisy__Ben的专栏 2万+

30天入门 SAP BTP 开发系列之二:了解 SAP BTP Region 的概念,包含账号申请的详细步骤

SAP BTP 的 Region,实际是一组按地理位置划分的、由 SAP 或合作 Hyperscaler 承载的基础设施栈。这些基础设施栈至少包含多可用区网络、对象存储、计算节点及自动化运维等服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1460

梁友栋barsky算法C语言代码,梁友栋-Barsky算法(

直线的裁剪: 梁友栋-Barsky算法(Liang-Barsky算法)1. 算法的基本思想以直线的参数方程为基础,对不同情况下的裁剪求得相应的参数值。2. 算法的推导过程情形一 pk=0(1)p1=p2=0若q1<0或q2<0,则可删除直线段若q1>=0且q2>=0,则进一步判断u=qk/pk(k=3,4)令 u1=max(0,u|pk<0)u2=min(1,...

weixin_42502345的博客 1157

仿真学习系列(四十三):Sigrity仿真之平面谐振分析

在 SIGRITY 中,平面谐振分析(Plane Resonance Analysis)是一种用于分析信号完整性(SI)问题的高级仿真方法,尤其关注于层间电磁波的传播、谐振现象和信号衰减等问题。平面谐振分析通常用于电源分配网络(PDN)、信号线和参考平面之间的相互作用。本文将详细介绍如何在 SIGRITY 中进行平面谐振分析,并提供一些实用的分析方法与步骤,帮助工程师们识别和优化可能存在的设计问题。

案例文章,高速信号 478

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C语言实现梁友栋-Barsky算法

(引用梁友栋-Barsky裁剪算法_梁友栋 barsky算法-优快云博客Cyrus和Beck用参数化方法提出了比Cohen-Sutherland更有效的算法。后来梁友栋和Barsky独立地提出了更快的参数化线段裁剪算法,也称为Liany-Barsky(LB)算法。0≤u≤1(3-9)式中,Δx=x2-x1,Δy=y2-y1,参数u在0~1之间取值,P(x,y)代表了该线段上的一个点,其值由参数u确定,由公式可知,当u=0时,该点为P1(x1,y1),当u=1时,该点为P2(x2,y2)。

IIIIIAN 1273

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

用OpenGL实现二维图形裁剪的梁友栋-Barsky算法代码(有注释)

用OpenGL实现二维图形裁剪的梁友栋-Barsky算法代码(有注释) 梁-Barsky算法

qq_42696069的博客 2746

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java实现梁友栋裁剪算法_梁友栋-Barsky裁剪算法

我们知道,一条两端点为P1(x1,y1)、P2(x2,y2)的线段可以用参数方程形式表示:x= x1+ u·(x2-x1)= x1+ u·Δxy= y1+ u·(y2-y1)= y1+ u·Δy0≤u≤1(3-9)式中,Δx=x2-x1,Δy=y2-y1,参数u在0~1之间取值,P(x,y)代表了该线段上的一个点,其值由参数u确定,由公式可知,当u=0时,该点为P1(x1,y1),当u=1时,该点...

weixin_33894886的博客 529

线段裁剪二:梁友栋Barsky算法

梁友栋-Barsky裁剪算法  Cyrus和Beck用参数化方法提出了比Cohen-Sutherland更有效的算法。后来梁友栋和Barsky独立地提出了更快的参数化线段裁剪算法,也称为Liany-Barsky(LB)算法。一、梁友栋-Barsky裁剪算法思想:  我们知道,一条两端点为P1(x1,y1)、P2(x2,y2)的线段可以用参数方程形式表示:

5373

java实现梁友栋裁剪算法_梁友栋-Barsky直线裁剪算法

【实例简介】内容:用梁友栋-Barsky算法进行线段裁剪要求:对于线段裁剪,线段被窗口的四条边裁剪的过程要显示出来用橡皮筋的形式输入剪裁线段【实例截图】【核心代码】90e06143-8af7-4264-b248-6195b3f8a5a2└── 梁友栋-Barsky直线裁剪算法├── Debug│ ├── MainFrm.obj│ ├── StdAfx.obj│ ├── TestDoc....

weixin_32747681的博客 652

计算机图形学:Cohen-Sutherland直线段剪裁算法及梁友栋-Barsky裁剪算法(算法原理及代码实现)

一、算法实现原理 Cohen-Sutherland直线段剪裁算法: 算法原理: (1)判断线段两端是否都落在窗口内,如果是,则线段完全可见,否则进行下一步 (2)判断线段两端是否都落在窗口外,如果是,则线段完全不可见,否则进行下一步 (3)求线段与窗口延长线的交点,这个交点将线段分为两端,一段完全不可见丢弃,对剩下的一部分重新进行上述一、二操作,直到结束。 算法实现: 用窗口四条边所在的直线将整个二位平面分为9个区域,定义下界限为ymin,上界限为ymax,左界限为xmin,右界...

qq_55982881的博客 1万+

计算机图形学·21 梁友栋-Barsky直线裁剪算法与三维直线裁剪

1、对于上讲的GH和IJ无法区分的问题,我们考虑线段的参数化表示:p(α) = (1-α)p1+ αp2,其中1≥α≥0。如果把每条窗边看成有一个指向外侧的单位法向量nk(比如左边的外法线指向左:(−1,0)),那么可以把pk写成点积:pk=nk⋅d,也就是说pk告诉了你线段方向d在相对于该边外法线上的投影。u=qk/pk的这个u就是线与该边相交的参数位置(如果交点在参数区间内的话就是实际的交点),如果pk<0(进入边),则u给出一个下界,反之则给出一个上界。①考察2个起始边交点的最大值,参数表示。

2303_79624041的博客 547

openGL-梁友栋-Barsky算法

代码// // main.cpp // hw_1_cut_line // // Created by 窦志扬 on 2018/3/11. // Copyright © 2018年 窦志扬. All rights reserved. //#include <GLUT/GLUT.h> #include <iostream> using namespace std; int x1,y1,x2,y2

FrankDura的博客 4376
上一篇: 平行投影与透视投影
下一篇: Bresenham画线算法详解及其OpenGL编程实现
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值