转自:用三阶贝塞尔曲线(贝兹曲线)拟合劣圆弧的公式(附伪代码)

三阶贝塞尔曲线有四个控制点A、B、C、D, 若要用三阶贝塞尔曲线拟合劣圆弧,自然的要求是:

1)A位于圆弧的起点,D位于圆弧的终点;

2)向量AB,CD分别与圆弧相切,且与圆弧的方向一致;

3)B、C两点位置对称。

在这样的要求之下,对于给定的圆弧(设圆心角为θ,半径为R),只有长度|AB|=|CD|待定。可以如下选取:

其中

注:

1)对于半圆,这样拟合所产生的(半径的最大的)误差约为β/2,精度会随角度减小而迅速提高。

2)若对精度要求不那么高,也可采用

误差会比这里的公式大40%左右. 这个公式应用很广泛.

3)   还有更精确的公式(大约能比这里的公式准千分之几),但形式较复杂,这里不再列出。可参见例如M. Goldapp, Approximation of circular arcs by cubic polynomials. Computer Aided Geometric Design, 1991, 8(3):227-238.

4) 试给出伪代码实现如下。

设待拟合的圆弧的圆心在(x0,y0),半径为R,辐角按逆时针方向从θ1到θ2 (θ2>θ1),于是有

β=0.0264731357562544,

t=tan[(θ2-θ1)/4],

λ=4t/3*(1-t^4/(1+t^2)*β),

xA=x0+R*cos(θ1),

yA=y0+R*sin(θ1),

xD=x0+R*cos(θ2),

yD=y0+R*sin(θ2),

xB=xA-λ*R*sin(θ1),

yB=yA+λ*R*cos(θ1),

xC=xD+λ*R*sin(θ2),

yC=yD-λ*R*cos(θ2).

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

  1. 绘制二次贝塞尔曲线(二次贝兹曲线)等距线:让 IE 支持 canvas接口 isPointInPath

    一.背景: 在使用 canvas 做知识图谱的时,实体关系使用线宽为 1px 的线绘制, 用户必须点在线上, 才能正常拾取到点击的边. 边关系,有些是直线边,有些是二次贝塞尔曲线.产品提议,线不能加粗 ...

  2. bezier.CSS_SVG_canvas画_贝兹曲线

    ZC:(1).SVG可以绘制 贝兹曲线:(2).canvas能绘制 贝兹曲线:(3).现在(20180202)查资料发现,css 貌似不能绘制 贝兹曲线,css使用贝兹曲线 主要是用于控制动画的速度, ...

  3. css沿曲线进行动画,jQuery沿贝兹曲线运动动画特效

    特效描述:jQuery 沿贝兹曲线运动 动画特效.jQuery沿贝兹曲线运动动画特效 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 10条曲线 开始动画 Plot 10条贝兹曲线 开 ...

  4. canvas 贝萨尔曲线

    二次贝塞尔曲线 定义:quadraticCurveTo() 方法通过使用表示二次贝塞尔曲线的指定控制点,向当前路径添加一个点. 说明:二次贝塞尔曲线需要两个点.第一个点是用于二次贝塞尔计算中的控制点, ...

  5. 初识贝塞尔(bezier)曲线

    文章目录 资料援引 贝塞尔曲线的用途 一阶贝塞尔(bezier)曲线 二阶贝塞尔(bezier)曲线 三阶贝塞尔(bezier)曲线 高阶贝塞尔(bezier)曲线 三阶贝塞尔曲线求插值(Slerp) ...

  6. .net cf wince 贝兹 曲线图

    项目需要在WINCE设备中显示曲线图,由于wince采集器默认是不带画图的动态库的,所以在网上找了一个动态库(XrossGDIPlus)来画图,关于XrossGDIPlus具体参考http://www ...

  7. 贝塞尔(贝兹尔)曲线介绍

    2019独角兽企业重金招聘Python工程师标准>>> 贝塞尔(贝兹尔)曲线介绍 什么是贝塞尔曲线? "贝赛尔曲线"是由法国数学家Pierre Bézier所发明 ...

  8. android运动轨迹怎么画,Android 利用三阶贝塞尔曲线绘制运动轨迹的示例

    本篇文章主要介绍了Android 利用三阶贝塞尔曲线绘制运动轨迹的示例,分享给大家,具体如下: 实现点赞效果,自定义起始点以及运动轨迹 效果图: xml布局: xmlns:tools="ht ...

  9. flutter绘图基础之三阶贝塞尔曲线cubicTo

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. 重要消息 [经验分享视频教程 感兴趣的伙伴可以瞅瞅] 1 flutter 中绘制基础引言 Flutter 中实现绘制的主要是Custo ...

最新文章

  1. mysql变量使用总结
  2. QTP整合QC自动化测试--目录结构搭建
  3. Python的字符串操作和Unicode
  4. was中java目录_was8.5选择安装选项,安装应用程序的目录填写自定义目录,应用部署成功后访问不了页面?...
  5. mfc 弹簧_弹簧和线程:事务
  6. Python的数据类型与结构
  7. Class.forName()、Class.forName().newInstance() 、New 三者区别!
  8. 无连续重复的随机算法
  9. win10 查看系统开机历史记录
  10. 孙鑫VC学习笔记:第十四讲 (一) 网络的基本概念
  11. linux c语言 模拟键盘输入
  12. html如何制作短信验证码,网站后台短信验证码怎么制作
  13. 【论文解读】Stacked Hourglass Networks
  14. SRS4.0源码分析-state-thread
  15. IQ信号,IQ样本,IQ数据,constallation diagram(星座图)
  16. 音量(DB)为什么都是负值
  17. 大数据架构之--Kappa架构
  18. NESASM教程——第八天——比较
  19. web前端学习笔记——选择器
  20. 下载安装setuptools

热门文章

  1. 手把手教你用jQuery Mobile做相册
  2. ipad开发对表格视图的基本实现
  3. Android实现远程控制PC(Android[客户端]+Qt[服务器端])
  4. CDH集群安装OpenLDAP服务并集成sssd客户端
  5. 在线客服系统的功能有哪些是非常重要的?
  6. 常见的数据集合——栈
  7. 软件开发人员的内功修炼之道
  8. 【异常检测】基于主成分分类器的异常检测方案(文献学习)
  9. BNUZ自动打卡系统
  10. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)