针对三阶贝塞尔曲线拟合圆弧,进行一般性的公式求解,可以表达如下图所示:

通过圆心O作出半径为1的圆弧A到D,作AB为和CD为圆弧的切线段,长度均为h。

这样,以A、B、C和D作为三阶贝塞尔曲线的控制点,求得使曲线的中点经过E时,对应的h。

根据贝塞尔曲线的知识,我们知道三阶贝塞尔曲线的参数方程如下,其中A、B、C、D为四个控制点坐标,P(t)表示曲线上的每一点。

根据贝塞尔曲线的对称性,不难想出E点在P(0.5)处,代入公式即可求得:

代入四个控制点坐标A,B,C和D,可以求解P(0.5)点坐标,并列出方程如下:

由正弦和余弦的倍角公式,可以进一步分解方程:

所以:

代入方程,可以得到:

结合平方和公式

化简方程,可以得到:

方程分别除以cos(θ/2)和sin(θ/2),进一步化简可得:

可以发现针对x,y的两个方程,最后化简结果相同,也即两个方程可以使用相同的h值为:

这样,我们即求得针对三阶贝塞尔曲线拟合圆弧的一般性的公式。

例如,当θ取90度时,得到三阶贝塞尔曲线拟合1/4圆弧的系数h的值为:

又如,当θ取60度时,得到三阶贝塞尔曲线拟合1/6圆弧的系数h的值为:

下面针对θ取值30到270度时,构建的一个动画演示,可以看到贝塞尔曲线与园的重合度在角度比较小时比较高。

备注:h体现为AB和CD的长度。

感谢Grapher和GeoGebra软件,使得方便排版文章中使用的公式和曲线。

三阶贝塞尔曲线拟合圆弧的一般公式相关推荐

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

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

  2. 用三次贝塞尔曲线拟合圆弧

    由于工作需求,需要用三次贝塞尔曲线拟合圆弧,所以查阅了一些资料,主要参考如下文章: 使用贝塞尔曲线拟合圆 但是文章写的过于简单,也没有推演步骤,而我需要知道任意圆弧如何求出贝塞尔曲线的两个控制点,所以 ...

  3. 我的Qt作品(7)使用Qt+OpenCV实现图像轮廓提取,再用三阶贝塞尔曲线拟合成光滑线条/多边形拟合

    一.贝塞尔曲线基础知识 给一系列顶点,如果只是用直线将其中的各个点依次连接起来,最终形成一个折线图,这种很容易实现.但是现实中事物的变化往往具有连续的特性,即使是给定了一系列离散的点,基于以往的生活经 ...

  4. 三阶贝塞尔曲线一分为二的一般公式

    三阶贝塞尔曲线被广泛用于各种需要平滑曲线的设计领域,一般通过多段三阶贝塞尔曲线顺次连接,构成比较复杂的曲线. 比如下图中,A.B.C和D控制红色曲线,D.E.F和G控制绿色曲线,G.H.I和A控制蓝色 ...

  5. [zz]用三阶贝塞尔曲线(贝兹曲线)拟合劣圆弧的公式(附伪代码)

    转自:用三阶贝塞尔曲线(贝兹曲线)拟合劣圆弧的公式(附伪代码) 三阶贝塞尔曲线有四个控制点A.B.C.D, 若要用三阶贝塞尔曲线拟合劣圆弧,自然的要求是: 1)A位于圆弧的起点,D位于圆弧的终点: 2 ...

  6. 【Android UI】贝塞尔曲线 ② ( 二阶贝塞尔曲线公式 | 三阶贝塞尔曲线及公式 | 高阶贝塞尔曲线 )

    文章目录 一.二阶贝塞尔曲线公式 二.三阶贝塞尔曲线 三.高阶贝塞尔曲线 贝塞尔曲线参考 : https://github.com/venshine/BezierMaker 一.二阶贝塞尔曲线公式 二 ...

  7. 【Android UI】贝塞尔曲线 ⑦ ( 使用 德卡斯特里奥算法 公式计算的 方法绘制三阶贝塞尔曲线示例 )

    文章目录 一.使用 德卡斯特里奥算法 公式计算的 方法绘制三阶贝塞尔曲线 二.代码示例 贝塞尔曲线参考 : https://github.com/venshine/BezierMaker 一.使用 德 ...

  8. 基于三阶贝塞尔曲线的数据平滑算法

    文章目录 前言 贝塞尔曲线 算法描述 算法实现 参考资料 前言 很多文章在谈及曲线平滑的时候,习惯使用拟合的概念,我认为这是不恰当的.平滑后的曲线,一定经过原始的数据点,而拟合曲线,则不一定要经过原始 ...

  9. 有趣的自定义View — 玫瑰·三阶贝塞尔曲线

    "玫瑰贝塞尔曲线"效果如下: 一.效果要求 1)在布局中某个位置处玫瑰开始由小而大,淡入出现: 2)出现的玫瑰,颜色随机而定,玫瑰可在布局内做动画亦可在整个界面中做动画,如上图: ...

最新文章

  1. ecplise SpringCould搭建过程---创建SpringCould父工程
  2. nginx进阶-动静分离,负载均衡
  3. java设计模式---三种工厂模式之间的区别
  4. java将字节数组转换成字符串,面试心得体会
  5. JM8.5中的7种宏块模式问题 - zhoujunming的专栏 - CSDN博客
  6. 003很好的网络博客(TCP/IP)-很全
  7. 统计文章中字母出现频率
  8. java分布式会话redis_详解springboot中redis的使用和分布式session共享问题
  9. 开源正在吞噬软件业?看开源的7大理念
  10. Linux下snmp常用的OID ---- SNMP硬件监控
  11. 关于内核态和用户态切换开销的测试
  12. 2017 Multi-University Training Contest - Team 4:1004. Dirt Ratio
  13. opencv图像像素操作方法
  14. 基于vscode编写markdown导出带书签(目录)的pdf
  15. python京东自动下单_京东自动下单脚本
  16. 关于 jspx 文件的一些说明
  17. 低压气体直流击穿特性
  18. 怎么把两个PDF合并成一个?这几种操作轻松合并
  19. Spring AOP tx:advice
  20. 什么是善辩型人格?善辩性人格的职业分析

热门文章

  1. oracle存储过程怎么做加密,Oracle存储过程加密实现方法
  2. windows安装spacemacs
  3. 惠普HP LaserJet Enterprise 500 M551xh 打印机驱动
  4. Minos嵌入式虚拟化方案 - 系统架构介绍
  5. GOOGLE服务地址入口
  6. 成都买房指南:外地人看完购房心中有谱
  7. Vue3前端模仿实现Windows窗口
  8. python视频教程推荐it教程网_2019年最新Python黑马头条推荐系统项目开发视频教程完整版...
  9. 计算机音乐数字乐谱童话,童话钢琴简谱-数字双手-光良
  10. SLA文档+中学部教练有悟