开学第一课:一定不要这样问老师Python问题

中国大学MOOC“Python程序设计基础”第6次开课时间

董付国老师Python系列教材推荐与选用参考

=========

推荐教材:

Python数据分析、挖掘与可视化》(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,2020年1月出版,2021年12月第7次印刷

图书封面:

封底三折页:

京东详情链接:

主要内容:全书共264页。

样书申请:请联系人民邮电出版社工作人员或董付国老师,仅限高校教师可申请。

配套资源:教学大纲、PPT、教案、源码、测试数据、习题答案、66课690分钟视频、智慧树网慕课、在线刷题软件。

  • 《Python数据分析、挖掘与可视化》前3章书稿PDF免费阅读

  • 《Python数据分析、挖掘与可视化》教学大纲(参考)

================

任务描述:

Liang-Barsky参数化裁剪算法是计算机图形学领域一个经典算法,用来对二维直线进行快速裁剪,使得仅需要绘制直线段落在裁剪窗口中的部分,不显示裁剪窗口之外的内容。

算法原理:

如上图,点p1(x1,y1)、p2(x2,y2)确定一条直线段,其与矩形裁剪窗口(左右边界x坐标左右分别为xL和xR,上下边界y坐标分别为yB和yT)四个边的交点分别为A、B、C、D,在A、B、p1这三个点中选择参数最大(距离终点p2最近)的一个点(即B),从C、D、p2这三个点中选择参数最小(距离起点p1最近)的一个点(即C),这两点之间的线段BC即为最终可见部分。

在该算法中,使用下面的参数方程表示直线p1p2,

x = x1 + t×dx

y = y1 + t×dy

其中,dx = x2 - x1,dy = y2 - y1,t∈[0,1]。

直线p1p2与裁剪窗口左、右、下、上四条边界的交点参数计算公式为,

左边界参数:t1 = (x1-xL) / -dx

右边界参数:t2 = (xR-x1) / dx

下边界参数:t3 = (y1-yB) / -dy

上边界参数:t4 = (yT-y1) / dy

在上面四个公式中,分母小于0时计算得到的参数距离直线段起点更近,分母大于0时计算得到的参数距离直线段终点更近,分母等于0时直线段与裁剪窗口平行需要单独计算。

以上图为例,有dx>0且dy<0,所以t1(点A)和t4(点B)是距离直线段起点p1更近的两个参数,已知起点p1对应的参数为0,所以最终可见部分线段的起点参数为max(0, t1, t4),得到点B。同理,t2(点C)和t3(点D)是距离直线段终点p2最近的两个参数,已知终点p2对应的参数为1,所以最终可见部分的终点参数为min(1, t2, t3),得到点C。于是,直线段p1p2落在裁剪窗口中的部分为线段BC。

参考代码:

运行效果:

温馨提示:

关注微信公众号“Python小屋”,在公众号后台发送消息“大事记”可以查看董付国老师与Python有关的重要事件;发送消息“教材”可以查看董付国老师出版的Python系列教材(已累计印刷超过140次)的适用专业详情;发送消息“历史文章”可以查看董付国老师推送的超过1000篇原创技术文章;发送消息“会议”可以查看近期董付国老师的培训安排;发送消息“微课”可以查看董付国老师免费分享的超过600节Python微课视频;发送消息“课件”可以查看董付国老师免费分享的Python教学资源;发送消息“小屋刷题”可以下载“Python小屋刷题神器”,免费练习2086道客观题和451道编程题,题库持续更新;发送消息“编程比赛”了解Python小屋编程大赛详情。

Python+OpenGL实现Liang-Barsky算法裁剪直线相关推荐

  1. 【计算机图形学】基于OpenGL的中点Bresenham算法画直线

    学习过三种画直线的方法(DDA.中点Bresenham算法.改进的中点Bresenham算法)后,想着实际操作一下如何能够实现,OpenGL无疑是很好的选择,在老师的推荐下,我尝试着用OpenGL来实 ...

  2. Python+OpenGL使用Cohen-Sutherland算法实现直线裁剪

    推荐教材: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...

  3. 计算机图形学直线裁剪原理,计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪...

    计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪 计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪 (1)算法设计原理 依次处理(p1,q1)(p2,q2)(p3,q3 ...

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

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

  5. 计算机图形学E2——OpenGL Bresenham算法画直线

    其他计算机图形学实验见 链接 要求 使用Bresemham算法画直线,并且通过鼠标可以实现交互操作 参考代码: 代码1 代码2 代码3(代码好理解) 代码4(讲解很全面) #include<io ...

  6. python使用RANSAC算法拟合直线

    nptest1 = np.array(line1_yx) print("nptest1", nptest1)line1 = cv2.fitLine(nptest1, cv2.DIS ...

  7. 《Python机器学习——预测分析核心算法》——2.2 分类问题:用声纳发现未爆炸的水雷...

    本节书摘来异步社区<Python机器学习--预测分析核心算法>一书中的第2章,第2.2节,作者:[美]Michael Bowles(鲍尔斯),更多章节内容可以访问云栖社区"异步社 ...

  8. python 决策树回归参数_使用 Python 和 scikit-learn 学习回归算法

    本教程已纳入面向开发者的机器学习这一学习路径. 简介 在本教程中,我们将介绍解决基于回归的机器学习问题的基础知识,并对当前最流行的一些算法进行比较研究. 设置 注册或登录. 从 Try IBM Wat ...

  9. Bresenham算法画直线

    本博客仅限于斜率在0~1之间的直线 原算法 设直线起始点坐标为(xs,ys),均为整数,即 x1 = xs, y1 = ys e(x2) = y2 - y1 - 0.5 = m - 0.5 终点坐标为 ...

最新文章

  1. R语言ggridges包可视化山脊图(Ridgeline Plots)并且在山脊图中添加均值竖线(Add Mean Line to RIdgeline Plot with ggridges in R)
  2. 169v 条目不存在_存在麒麟?牛顿烈焰激光剑理论!生活中的科学思维
  3. android camera2获取摄像头支持的分辨率
  4. HDU 1873 看病要排队(结构体+优先队列)
  5. 分析unix系统日期析取ftp登陆和断开信息
  6. php 接口升级,PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [6] 版本升级接口开发...
  7. MySQL常见的存储引擎的区别?
  8. 「产品经理全连接系列2」企业如何开展敏捷或DevOps的研发变革
  9. 身神话继续遭受DDOS进攻,也遭受了雷同的陵犯
  10. m3u8在线提取工具:M3U8 Downloader 高速专业m3u8下载器下载
  11. 信息系统项目管理师思维导图
  12. 学习一下什么是SRE和DevOps
  13. mysql统计字数_mysql – 使用SQL来确定文本字段的字数统计
  14. 斯坦福大学公开课第四课 Views 视图
  15. 基础知识 | 什么是二进制文件?
  16. MySQL卸载重装解决方案
  17. KOBAS数据库使用指南
  18. 从小白到数据分析师的成长之路
  19. 绕圈报数游戏Java算法_经典游戏(围圈数数,数到3者出圈,求最后幸存者)
  20. 最大后验估计(MAP)

热门文章

  1. php is_subclass_of,PHP_PHP is_subclass_of函数的一个BUG和解决方法,is_subclass_of的作用: 复制代码 - phpStudy...
  2. dlibdotnet 人脸相似度源代码_使用dlib中的深度残差网络(ResNet)实现实时人脸识别 - supersayajin - 博客园...
  3. terminal mysql 停止_转载MySQL之终端(Terminal)管理MySQL
  4. 查询中where和having的区别
  5. ElasticSearch三master节点集群状态查看方法
  6. 怎么在html使用百度商桥,电脑版网站如何添加爱番番(原:百度商桥)
  7. 快速入门 Nacos 作为配置中心操作
  8. java fragment_初步认识Fragment 之一 编写简单的fragment代码
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的疫苗接种信息管理系统
  10. linux$1和$ 1 区别,linux 关于$0$1$n$$$?$#笔记