计算机图形学2-Liang-Barsky直线裁剪算法

  • 效果
  • 代码

效果

首先点击两个点画一个矩形窗口,接下来继续点两点画个直线,画完之后按下“x”键则会用liang方法裁剪直线,将在窗口外的部分除去,按下”q”退出

代码

import cv2
import numpy as np
import time
import mathimg  =  np.zeros((600, 800, 3), np.uint8)#背景
flag,count=False,2
ptl1x,ptl1y,ptl2x,ptl2y=0,0,0,0
ptR1x,ptR1y,ptR2x,ptR2y=0,0,0,0def LiangCut(x1,y1,x2,y2,xl,yb,xr,yt):dx=x2-x1dy=y2-y1p=[1,-dx,dx,-dy,dy]q=[1,x1-xl,xr-x1,y1-yb,yt-y1]print(p,q,xl,yb,xr,yt)cv2.line(img,(x1,y1),(x2,y2),(0,0,0))if (dx==0 and (q[1]<0 or q[2]<0)) or (dy==0 and (q[3]<0 or q[4]<0)):returnumax,umin=0,1for i in range(1,5):if p[i]>0:umin=min(umin,q[i]/p[i])elif p[i]<0:umax=max(umax,q[i]/p[i])print(umax,umin)if umax>umin:return print("in the rect!")x1,y1,x2,y2=int(x1+umax*dx),int(y1+umax*dy),int(x1+umin*dx),int(y1+umin*dy)str1 = '(x:'+ str(x1) + ',y:'+ str(y1) + ')'str2 = '(x:'+ str(x2) + ',y:'+ str(y2) + ')'cv2.putText(img,str1 , (x1, y1), cv2.FONT_HERSHEY_PLAIN,1.0, (0, 0, 255), thickness=1)cv2.putText(img,str2 , (x2, y2), cv2.FONT_HERSHEY_PLAIN,1.0, (0, 0, 255), thickness=1)cv2.line(img,(x1,y1),(x2,y2),(255,255,255))def draw_func(event, x, y, flags, param):global flag,count,ptl1x,ptl1y,ptl2x,ptl2y,ptR1x,ptR1y,ptR2x,ptR2yif event == cv2.EVENT_LBUTTONDOWN:print('(x:',x,',y:',y,')')cv2.circle(img,(x,y),1,(0,255,0),thickness=5)if count==2:count-=1ptR1x,ptR1y=x,yelif count==1:count-=1ptR2x,ptR2y=x,ycv2.rectangle(img,(ptR1x,ptR1y),(ptR2x,ptR2y),(255,0,255))else:if flag:ptl2x,ptl2y=x,ycv2.line(img,(ptl1x,ptl1y),(ptl2x,ptl2y),(255,255,255))flag=Falseelse:ptl1x,ptl1y=x,yflag=Truecv2.namedWindow('src')
cv2.setMouseCallback('src',draw_func)while(1):cv2.imshow('src',img)code=cv2.waitKey(100)if code == ord('q'):#按下q退出breakelif code == ord('x'):#按下x裁剪LiangCut(ptl1x,ptl1y,ptl2x,ptl2y,ptR1x,ptR1y,ptR2x,ptR2y)
cv2.destroyAllWindows()

计算机图形学2-Liang-Barsky直线裁剪算法相关推荐

  1. 计算机图形学实验报告 裁剪,计算机图形学-实验报告三-图形裁剪算法

    <计算机图形学-实验报告三-图形裁剪算法>由会员分享,可在线阅读,更多相关<计算机图形学-实验报告三-图形裁剪算法(9页珍藏版)>请在人人文库网上搜索. 1.图形裁剪算法1. ...

  2. 计算机图形剪裁程序说明,计算机图形学实验报告实验2裁剪算法实验

    裁剪算法实验 一. 实验目的: 直线段的裁剪:编码裁剪算法,中点分割裁剪算法. 二.实验内容: //BasicGraph.cpp //请将下列裁剪程序补充完整,并用注释说明是何种裁剪算法 void E ...

  3. 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky

    接上文 计算机图形学 学习笔记(三):多边形的区域填充算法,反走样算法 光栅图形学算法 本文主要讲解直线裁剪算法. 裁剪 使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的知识图形 ...

  4. 【计算机图形学 】Cohen-Sutherland 直线裁剪算法 | OpenGL+鼠标交互

    文章目录 其他计算机图形学实验 前言 代码借鉴 步骤 1.点的结构体 2. 创建用于裁剪的窗口并绘制 3.画点函数 4. Cohen-Sutherland 直线裁剪算法部分 4.1 判断点所在位置,生 ...

  5. 计算机图形学——二维图形变换裁剪

    算法描述 1.基本变换矩阵 (1).缩放矩阵 void ScaleMatrix(float Sx, float Sy, float m[3][2]) {for (int i = 0; i < 3 ...

  6. 计算机图形学E7——OpenGL 交互式三角形裁剪直线

    其他计算机图形学实验见 链接 #include<gl/glut.h> #include<iostream> #include<algorithm> #include ...

  7. 图形学画直线c语言,计算机图形学:3种画直线算法(转)

    //--------------------------------------------------------------------- //绘制直线的DDA算法基本函数 //--------- ...

  8. 计算机图形学(三种画线算法)

    第二章:光栅图形学算法 1.光栅显示器:光栅扫描式图形显示器简称光栅显示器,是画点设备,可看作是一个点阵单元发生器,并可控制每个点阵单元的亮度 2.由来:随着光栅显示器的出现,为了在计算机上处理.显示 ...

  9. 计算机图形学画图形,计算机图形学(三种画线算法)(示例代码)

    第二章:光栅图形学算法 1.光栅显示器:光栅扫描式图形显示器简称光栅显示器,是画点设备,可看作是一个点阵单元发生器,并可控制每个点阵单元的亮度 2.由来:随着光栅显示器的出现,为了在计算机上处理.显示 ...

  10. 计算机图形学(1)基本图形算法

    计算机图形学--基本图形算法 光栅图形中点的表示 屏幕坐标系在左上角 地址=(Xmax-Xmin)[每行像素点数]*(Y-Ymin)[行数]+(X-Xmin)[行中位置]+基地址 直线扫描转换算法 假 ...

最新文章

  1. mfc 制作不同的文档模板mdi不同的子窗体_制作ACK集群自定义节点镜像的正确姿势...
  2. python基本数据类型的结构和使用方法
  3. java 命令行 读取文件_java读取txt文件
  4. 数学建模债券投资组合_1998年全国大学生数学建模竞赛题目A题投资的收益和风险.PDF...
  5. PHP生成缩略图函数
  6. php获取html中文本框内容_小猿圈Python入门之批量获取html内body内容的方法
  7. 比其他行业晚了十年的工业软件,转型的核心和动力是什么?
  8. Controller接口控制器(6)
  9. ADO,ADO.NET,OLEDB,ODBC连接数据库的区别
  10. android adb调试驱动,安卓手机上的调试工具adb驱动要怎么安装 手机安装adb驱动怎么做 - 驱动管家...
  11. 12.4 正项数项级数收敛的充要条件及比较判别法
  12. Django ---uploads files
  13. grafana设置邮件监控报警
  14. BIDI单纤双向光模块
  15. python广告点击率预测_推荐系统中的点击率预估 – Advertising Recommendation
  16. 计算股票季度收益率、年收益率和相对收益率并可视化展示。
  17. 简约纯色卡通蝴蝶Mac动态壁纸
  18. 解决org.apache.zookeeper.KeeperException$UnimplementedException:KeeperErrorCode = Unimplemented for /S
  19. Python爬虫:Python+WebSocket获取体育实时赛事数据
  20. 机器学习实战----贝叶斯之概览篇

热门文章

  1. Oracle数据库优化-列值大部分为null而谓词取非null值
  2. 阿里淘宝Nginx升级版Tengine
  3. 【LeetCode每日一题】633. 平方数之和
  4. VueConf 感想与总结
  5. 基于GDAL库读取GRD数据文件的C++代码
  6. docker 配置远程deamon
  7. 论文模型图全攻略——模型图就该有模型图的样子!
  8. excel中的if函数使用方法
  9. MIR7 金额计算公式
  10. 高数 | 【多元函数微分学】全微分不变性、隐函数求导辨析