在comp.graphics.faq中涵盖
摘抄:
主题4.04:如何将贝塞尔曲线拟合到圆上?
有趣的是,贝塞尔曲线可以近似一个圆,但不能完美地拟合一个圆。一个常见的近似方法是使用四个贝塞尔曲线来建模一个圆,每个贝塞尔曲线的控制点到端点的距离为d = r * 4 *(sqrt(2)-1)/ 3(其中r是圆半径),而在在端点处与圆相切的方向。这样可以确保贝塞尔曲线的中点在圆上,并且一阶导数是连续的。
这种近似的径向误差约为圆半径的0.0273%。
Michael Goldapp,“三次多项式逼近圆弧”,计算机辅助几何设计(#8 1991 pp.227-238)
Tor Dokken和Morten Daehlen,“曲率连续的贝塞尔曲线的圆的良好近似”,计算机辅助几何设计(1990年第7页,第33-41页)。/science/article/pii/016783969090019N(非免费文章)
另请参见/articles/bezier-circle/上的非付费文章
浏览器和画布元素。
请注意,某些浏览器将Bezier曲线用于其画布绘制弧,Chrome(目前)使用4扇区方法,而Safari使用8扇区方法,这种差异仅在高分辨率时才明显,因为该分辨率为0.0273%,并且只有在圆弧平行且异相绘制时才真正可见,您会注意到圆弧从真实圆中振荡。当曲线围绕其径向中心进行动画处理时,效果也更加明显,半径通常为600px半径,将在该大小上有所不同。
某些绘图API没有真正的圆弧渲染,因此它们也使用Bezier曲线,例如Flash平台没有圆弧绘图api,因此任何提供圆弧的框架通常都使用相同的Bezier曲线方法。
请注意,浏览器中的SVG引擎可能使用不同的绘制方法。
其他平台
无论您尝试使用哪种平台,都值得检查一下圆弧绘制的完成方式,以便您可以预测这样的视觉错误并进行调整。