什么是贝塞尔曲线?

​ 贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发,以稳定数值的方法求出贝塞尔曲线。

​ 贝塞尔曲线具有很多特殊的性质,在一些领域比如图形设计中应用十分广泛,贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制。

一阶曲线

一阶曲线很好理解, 就是根据t来的线性插值. P0P_0P0​表示的是一个向量(x,y)(x ,y)(x,y), 其中xxx和yyy是分别按照这个公式来计算的。

B1(t)=(1−t)P0+tP1,t∈[0,1]

B_{1}(t)=(1-t) P_{0}+t P_{1}, t \in[0,1]B1​(t)=(1−t)P0​+tP1​,t∈[0,1]

可以看到,一阶曲线是一条直线。

二阶曲线

既然前面提到递归,那么二阶必然和一阶有关系,

在平面上三个不共线的三点,依次用线段连接,分别取PaP_aPa​和PbP_bPb​两点,使得P0Pa:PaP1=P1Pb:PbP2=tP_0P_a:P_aP_1=P_1P_b:P_bP_2=tP0​Pa​:Pa​P1​=P1​Pb​:Pb​P2​=t,此时PaPbP_aP_bPa​Pb​又是一条直线,可以按照一阶方式来插值了:

Pa=(1−t)P0+tP1

P_a=(1-t) P_{0}+t P_{1}Pa​=(1−t)P0​+tP1​

Pb=(1−t)P1+tP2

P_b=(1-t) P_{1}+t P_{2}Pb​=(1−t)P1​+tP2​

B2(t)=(1−t)Pa+tPb=(1−t)2P0+2t(1−t)P1+t2P2,t∈[0,1]

B_2(t)=(1-t) P_{a}+t P_{b}=(1-t)^{2} P_{0}+2 t(1-t) P_{1}+t^{2} P_{2}, t \in[0,1]B2​(t)=(1−t)Pa​+tPb​=(1−t)2P0​+2t(1−t)P1​+t2P2​,t∈[0,1]

三阶曲线

二阶的贝塞尔通过在控制点之间再采点的方式实现降阶, 每一次选点都是一次的降阶,三阶的也是同理:

这样通过给定的离散点就能确定它们之间的插值曲线了。

钢笔工具

贝塞尔曲线在图形设计的应用中,最典型的就是Photoshop中的钢笔工具。如下,中间一个节点,两边两个手柄,调节手柄的方向可以控制曲线的走向,调节手柄的长度可以控制曲线的弧度,也就是调节ttt的过程。

熟练运用之后就能绘制复杂的图形,然后上色即可。

使用python绘制图像

到这里开始切入正题了,前面提到既然贝塞尔曲线可以通过公式表示,那么一定可以通过python实现自动化操作。整体的思路就是给定一个位图图像,然后将其矢量化以保存矢量路径,然后读取路径使用贝塞尔曲线勾勒填充就可以了。

位图矢量化

位图与矢量图的一大区别就是位图图像进行处理,放大后会出现方块状,图片属于真彩色,图片会失真。位图图像善于重现颜色的细微层次,能够制作出色彩和亮度变化丰富的图像,可逼真地再现这个世界,文件庞大,不能随意缩放。矢量图中保存的是线条和图块的信息,也就是所谓的路径,在python中可以借助Potrace模块来完成矢量化的操作。

定义贝塞尔曲线

根据前面的知识定义贝塞尔曲线比较简单,这里使用粗暴的函数嵌套方式,感兴趣的可以另外改善。

对于复杂的图像我们一般使用三阶以上的曲线描摹,需要定义类似于画笔的操作,即绘制曲线至(x,y)点,

然后就是其他的线条操作。

绘图

前面位图中存取了路径信息,我们只需要根据相应的路径使用相应的绘制操作即可,如下

整个绘图过程可以采用python中的turtle模块,完成动画,整个过程约二三十分钟,一气呵成,用来描摹心仪的小姐姐最合适不过~,下面放上小姐姐的照片,

然后经过简单的剪辑配乐,就可以做成日常逗人开心的小视频了,点击下面链接即可观看,

用python画出南方菇凉~

代码链接:draw-picture-with-turtle

三阶贝塞尔曲线选点_什么?贝塞尔曲线竟然可以用来描摹心仪的小姐姐!相关推荐

  1. 三阶贝塞尔曲线选点_用三阶贝塞尔曲线拟合圆

    前言 由于贝塞尔曲线控制简便且具有极强的描述能力,它常被用来生成复杂的平滑曲线:圆形是一种很常用的普通图形,在计算机图形学中也有很多画圆的算法,本文想探究一下如何用三阶贝塞尔曲线拟合圆形. 在研究这个 ...

  2. delphi chart 曲线实时_发展学生曲线跑能力的体育游戏及运用研究

    不想错过精彩的推送? 戳左上角蓝字"体育教师大本营"关注 并点击右上角●●●菜单栏 选择"设置⭐️标"或"置顶公众号" 每天早上7:00,体 ...

  3. lm曲线公式推导_宏观经济学 - LM曲线

    L:货币的需求 M:货币的供给 ①货币的供给:货币的实际供给m = M/P(名义货币供给/物价水平),在宏观经济学中短期内M和P都是常数,所以m也是常数. ②货币的需求:货币的需求有三种动机:1交易动 ...

  4. 幅相曲线渐近线_幅相曲线.ppt

    幅相曲线.ppt 自动控制原理 自动控制原理 自动控制原理 (第 19 讲) 课程回顾(1) 课程回顾(2) 课程回顾(3) §5.2 幅相频率特性 Nyquist (6) §5.2 幅相频率特性 N ...

  5. 可以自定义公式的计算器_震惊!计算器竟然可以用来干这个···

    作为一个理工科研狗,不可避免和各种方程打交道,不是正求值就是逆求解.求值还好说,显式函数公式带入即可,甭管是赛因还是抠赛因,老哥还是平方根,科学计算器那么一按,结果美滋滋.然鹅,正如伟大的数学家约翰· ...

  6. 模块说和神经网络学说_让神经网络解释自己:牛津大学博士小姐姐,用毕业论文揭示“炼丹炉”结构...

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 神经网络就像"炼丹炉"一样,投喂大量数据,或许能获得神奇的效果. "炼丹"成功后,神经网络也能对没见 ...

  7. 抖音上的python课程_如何用Python抓抖音上的小姐姐

    爬虫的案例我们已讲得太多.不过几乎都是 网页爬虫 .即使有些手机才能访问的网站,我们也可以通过 Chrome 开发者工具 的 手机模拟 功能来访问,以便于分析请求并抓取.(比如 3分钟破译朋友圈测试小 ...

  8. python vba excel课程_【Python3+VBA】在Excel中生成小姐姐|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

  9. 抖音上学python靠谱吗_如何用Python抓抖音上的小姐姐

    爬虫的案例我们已讲得太多.不过几乎都是 网页爬虫 .即使有些手机才能访问的网站,我们也可以通过 Chrome 开发者工具 的 手机模拟 功能来访问,以便于分析请求并抓取.(比如 3分钟破译朋友圈测试小 ...

最新文章

  1. Linux 终端显示 Git 当前所在分支
  2. 掘金小册Jenkins大纲准备
  3. c++直方图均衡化源码
  4. hdu4930 模拟斗地主
  5. 编程方法学15:指针要点回顾
  6. vue 页面生成pdf并下载 vue页面转PDF
  7. 安卓模拟器获取服务器信息出错,安卓模拟器客户端与服务器不同步
  8. Mr. Panda and Kakin(拓展欧几里得 + O(1)快速乘)
  9. HD-SDI光端机有哪些优势?
  10. Linux系统Shutdown命令定时关机详解
  11. Android小項目之---吃飯選哪?--》選擇對話框(附源碼)
  12. 统计iOS项目代码行数
  13. Vancouver wechat
  14. “互联网+”大赛全市第三名软件杯全国第一名 - Cloud Lab商业策划书
  15. linux下如何安装凤凰系统,凤凰系统Phoenix OS U盘版安装制作教程
  16. Scratch软件界面介绍
  17. 印象深刻的bug汇总(持续更新)
  18. Android 自定义软键盘实现 数字九宫格
  19. 梦泪的服务器是qq还是微信,梦泪发现微信区1奇特现象,赛季末分数远不如QQ区,看到1细节,懂了...
  20. keil C语言编程 位地址定义,Keil C编写下位机程序的小技巧和注意点

热门文章

  1. Django+Vue环境搭建
  2. 一名野生程序员的自我修养
  3. Java线程安全与不安全
  4. Android自动手绘,Android自动手绘,圆你儿时画家梦!
  5. 设置VMWARE通过桥接方式使用主机无线网卡上网及Linux网络配置
  6. vue项目部署在二级目录下
  7. 勇者斗恶龙1 android,勇者斗恶龙1美版FC版
  8. Android Doze模式分析
  9. redis锁用法java代码
  10. pat甲级考试报名费_PAT(甲级)2019年冬季考试 题解