liang-barsky

Here you will learn about liang barsky line clipping algorithm in C and C++.

在这里,您将了解C和C ++中的liang barsky线裁剪算法。

This Algorithm was developed by Liang and Barsky. It is used for line clipping as it is more efficient than Cyrus Beck algorithm and Cohen Sutherland algorithm because it uses more efficient parametric equations to clip the given line.

该算法由Liang和Barsky开发。 它比Cyrus Beck算法和Cohen Sutherland算法更有效,因为它使用更有效的参数方程式裁剪给定的线,因此它比Cyrus Beck算法和Cohen Sutherland算法更有效。

These parametric equations are given as:

这些参数方程式为:

x = x1 + tdx

x = x1 + tdx

y = y1 + tdy, 0 <= t <= 1

y = y1 + tdy,0 <= t <= 1

Where dx = x2 – x1 & dy = y2 – y1

dx = x2 – x1&dy = y2 – y1

Liang Barsky line clipping algorithm uses 4 inequalities with 2 parameters p & q which are defined in the algorithm below.

Liang Barsky线裁剪算法使用4个不等式以及2个参数p&q,这些参数在下面的算法中定义。

算法 (Algorithm)

1. Read 2 endpoints of line as p1 (x1, y1) & p2 (x2, y2).

1.将线的2个端点读取为p1(x1,y1)和p2(x2,y2)。

2. Read 2 corners (left-top & right-bottom) of the clipping window as (xwmin, ywmin, xwmax, ywmax).

2.将剪切窗口的2个角(左上角和右下角)读取为(xwmin,ywmin,xwmax,ywmax)。

3. Calculate values of parameters pi and qi for i = 1, 2, 3, 4 such that

3.计算i = 1、2、3、4的参数pi和qi的值,使得

p1 = -dx, q1 = x1 – xwmin

p1 = -dx,q1 = x1 – xwmin

p2 = dx, q2 = xwmax – x1

p2 = dx,q2 = xwmax – x1

p3 = -dy, q3 = y1 – ywmin

p3 = -dy,q3 = y1 – ywmin

p4 = dy, q4 = ywmax – y1

p4 = dy,q4 = ywmax – y1

4. if pi = 0 then line is parallel to ith boundary

4.如果pi = 0,则线平行于第i个边界

if qi < 0 then line is completely outside boundary so discard line

如果qi <0,则线完全在边界之外,因此丢弃线

else, check whether line is horizontal or vertical and then check the line endpoints with the corresponding boundaries.

否则,检查线是水平还是垂直,然后检查具有相应边界的线端点。

5. Initialize t1 & t2 as

5.初始化t1和t2为

t1 = 0 & t2 = 1

t1 = 0&t2 = 1

6. Calculate values for qi/pi for i = 1, 2, 3, 4.

6.计算i = 1、2、3、4时qi / pi的值。

7. Select values of qi/pi where pi < 0 and assign maximum out of them as t1.

7.在pi <0的情况下选择qi / pi的值,并将其中的最大值分配为t1。

8. Select values of qi/pi where pi > 0 and assign minimum out of them as t2.

8.在pi> 0的情况下选择qi / pi的值,并将其中的最小值指定为t2。

9. if (t1 < t2) { xx1 = x1 + t1dx

9.如果(t1 <t2){xx1 = x1 + t1dx

xx2 = x1 + t2dx

xx2 = x1 + t2dx

yy1 = y1 + t1dy

yy1 = y1 + t1dy

yy2 = y1 + t2dy

yy2 = y1 + t2dy

line (xx1, yy1, xx2, yy2) }

行(xx1,yy1,xx2,yy2)}

10. Stop.

10.停下来。

优点 (Advantages)

1. More efficient than other algorithms as line intersection with boundaries calculations are reduced.

1.与其他算法相比,效率更高,因为与边界计算的线相交减少了。

2. Intersections of line are computed only once.

2.线的交点仅计算一次。

用C和C ++编写Liang Barsky剪线算法程序 (Program for Liang Barsky Line Clipping Algorithm in C and C++)

C程序 (C Program)

#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<dos.h>void main()
{int i,gd=DETECT,gm;int x1,y1,x2,y2,xmin,xmax,ymin,ymax,xx1,xx2,yy1,yy2,dx,dy;float t1,t2,p[4],q[4],temp;x1=120;y1=120;x2=300;y2=300;xmin=100;ymin=100;xmax=250;ymax=250;initgraph(&gd,&gm,"c:\\turboc3\\bgi");rectangle(xmin,ymin,xmax,ymax);dx=x2-x1;dy=y2-y1;p[0]=-dx;p[1]=dx;p[2]=-dy;p[3]=dy;q[0]=x1-xmin;q[1]=xmax-x1;q[2]=y1-ymin;q[3]=ymax-y1;for(i=0;i<4;i++){if(p[i]==0){printf("line is parallel to one of the clipping boundary");if(q[i]>=0){if(i<2){if(y1<ymin){y1=ymin;}if(y2>ymax){y2=ymax;}line(x1,y1,x2,y2);}if(i>1){if(x1<xmin){x1=xmin;}if(x2>xmax){x2=xmax;}line(x1,y1,x2,y2);}}}}t1=0;t2=1;for(i=0;i<4;i++){temp=q[i]/p[i];if(p[i]<0){if(t1<=temp)t1=temp;}else{if(t2>temp)t2=temp;}}if(t1<t2){xx1 = x1 + t1 * p[1];xx2 = x1 + t2 * p[1];yy1 = y1 + t1 * p[3];yy2 = y1 + t2 * p[3];line(xx1,yy1,xx2,yy2);}delay(5000);closegraph();
}

C ++程序 (C++ Program)

#include<iostream.h>
#include<graphics.h>
#include<math.h>
#include<dos.h>void main()
{int i,gd=DETECT,gm;int x1,y1,x2,y2,xmin,xmax,ymin,ymax,xx1,xx2,yy1,yy2,dx,dy;float t1,t2,p[4],q[4],temp;x1=120;y1=120;x2=300;y2=300;xmin=100;ymin=100;xmax=250;ymax=250;initgraph(&gd,&gm,"c:\\turboc3\\bgi");rectangle(xmin,ymin,xmax,ymax);dx=x2-x1;dy=y2-y1;p[0]=-dx;p[1]=dx;p[2]=-dy;p[3]=dy;q[0]=x1-xmin;q[1]=xmax-x1;q[2]=y1-ymin;q[3]=ymax-y1;for(i=0;i<4;i++){if(p[i]==0){cout<<"line is parallel to one of the clipping boundary";if(q[i]>=0){if(i<2){if(y1<ymin){y1=ymin;}if(y2>ymax){y2=ymax;}line(x1,y1,x2,y2);}if(i>1){if(x1<xmin){x1=xmin;}if(x2>xmax){x2=xmax;}line(x1,y1,x2,y2);}}}}t1=0;t2=1;for(i=0;i<4;i++){temp=q[i]/p[i];if(p[i]<0){if(t1<=temp)t1=temp;}else{if(t2>temp)t2=temp;}}if(t1<t2){xx1 = x1 + t1 * p[1];xx2 = x1 + t2 * p[1];yy1 = y1 + t1 * p[3];yy2 = y1 + t2 * p[3];line(xx1,yy1,xx2,yy2);}delay(5000);closegraph();
}

Output

输出量

Author Bio:

作者简介:

I am Rahul Maheshwari from India currently pursuing engineering degree in Computer Science. I am passionate about programming and loves to code as much as I can and likes to help people to become better in programming.

我是印度的Rahul Maheshwari,目前正在攻读计算机科学的工程学位。 我对编程充满热情,并且热衷于编码,并且喜欢帮助人们在编程方面变得更好。

Connect with him: Facebook | Linkedin

与他联系: Facebook | 领英

Comment below if you have doubts or found anything incorrect in above liang barsky line clipping algorithm in C and C++.

如果您对以上使用C和C ++的liang barsky线裁剪算法有疑问或发现任何不正确之处,请在下面评论。

翻译自: https://www.thecrazyprogrammer.com/2017/02/liang-barsky-line-clipping-algorithm.html

liang-barsky

liang-barsky_C和C ++中的Liang Barsky线裁剪算法相关推荐

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

    梁友栋-Barsky算法是一种参数线裁剪算法. 为两个参数方程,为两点的差值,其中的由来是整理参数方程中三角函数的值得出,因为取值需要在裁剪框内,所以u只需要取0~1范围内的就足够. 是结合四条边界线 ...

  2. 理解梁友栋-Barsky裁剪算法

    学习图形学窗口裁剪算法时,很多教材只是对梁友栋-Barsky裁剪算法过程做了简单的介绍,并没有对原理过多的解释.老而学者如秉烛夜行,用了两三天时间终于搞明白算法原理. 消除指定区域内或区域外的图形部分 ...

  3. OpenCV中的霍夫线变换、概率霍夫线变换

    OpenCV中的霍夫线变换.概率霍夫线变换 1. 效果图 2. 原理 2.1 什么是霍夫变换? 2.2 什么是概率霍夫变换? 3. 源码 3.1 霍夫变换 3.2 概率霍夫变换 参考 这篇博客将介绍P ...

  4. 自动驾驶中常用的四类机器学习算法

    来源:智车科技 机器学习算法已经被广泛应用于自动驾驶各种解决方案,电控单元中的传感器数据处理大大提高了机器学习的利用率,也有一些潜在的应用,比如利用不同外部和内部的传感器的数据融合(如激光雷达.雷达. ...

  5. 编程面试过程中最常见的10大算法

    编程面试过程中最常见的10大算法 编程语言:C/C++ 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 A ...

  6. ARCore中根据屏幕坐标计算射线的算法

    ARCore中根据屏幕坐标计算射线的算法 ARCore中提供了根据屏幕坐标.视口大小及view. project矩阵计算从屏幕坐标发射一条射线的方法,此方法用于3D拾取. 1 class Ray { ...

  7. DDos攻击,使用深度学习中 栈式自编码的算法

    转自:http://www.airghc.top/2016/11/10/Dection-DDos/ 最近研究了一篇论文,关于检测DDos攻击,使用了深度学习中 栈式自编码的算法,现在简要介绍一下内容 ...

  8. 计算机科学中最重要的32个算法zz

    计算机科学中最重要的32个算法zz http://www.infoq.com/cn/news/2012/08/32-most-important-algorithms       奥地利符号计算研究所 ...

  9. 计算机科学中最重要的32个算法(转)

    奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提 ...

  10. (转载)计算机科学中最重要的32个算法

    奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了 一篇文章, ...

最新文章

  1. WISEGATE:SIEM的最佳实践讨论
  2. 2020 8月 每日花语
  3. [PAT乙级]1029 旧键盘
  4. android studio入门
  5. 功能强大!IntelliJ IDEA 2022.1正式发布
  6. char(128) mysql_char能表示(-128~127)
  7. eclipse安装反编译插件:jd-eclipse 查看源码
  8. 学习笔记#工作日志使用
  9. 李彦宏数字人开场!百度在元宇宙产品“希壤”中办了一场大会,还说未来10年拥堵问题将被解决~...
  10. 高德地图API总结--地图加载、权限,定位
  11. ios睡眠分析 卧床 睡眠_在HealthKit中用 Swift 进行睡眠分析
  12. Itunes恢复备份失败解决办法(C盘空间不足)
  13. 个人github地址 https://github.com/Gerry1218
  14. 《稀缺》塞德希尔·穆来纳森 / 埃尔德·沙菲尔
  15. 我们采访了三位学生:他们写代码、95 后、来自大陆和台湾
  16. 一文理解CPU进行简单加法(计算机组成原理5.1CPU的功能和基本结构)
  17. 端口telnet通,但是无法访问前端资源(浏览器空白)
  18. jquery-day32
  19. 移位寄存器型计数器与顺序脉冲发生器
  20. 动态规划 - N步台阶问题

热门文章

  1. 每日一词20190301——比例尺和地图比例尺
  2. 一种兼顾速度和效果的对比度增强算法——CONTRAST ENHANCEMENT BASED ON LAYERED DIFFERENCE REPRESENTATION
  3. python生成epub文件_将'epub'文件转换为文本
  4. Android单点触摸与多点触摸
  5. Java抓包分析一(基于jnetpcap进行抓包)——抓包环境搭建,获取网卡
  6. CAD中怎么管理线缆CAD图层?
  7. 南邮计算机学院复试,过来人建议:南京邮电大学考研复试注意事项
  8. 奥城大学计算机专业,[美国金融硕士排名2018]2018年美国硕士双录取大学名单
  9. 【js与jquery】产品详情页面常用的js特效
  10. Spring Cloud入门-Oauth2授权之JWT集成(Hoxton版本)