使用贝塞尔曲线进行圆近似

我有2个关于贝塞尔曲线的问题,并使用它们来近似圆的部分。

  1. 给定单位圆弧(1,0) – >(cos(a),sin(a)),其中0 <a <pi / 2,它将导致该弧的良好近似,以找到贝塞尔曲线的控制点p1 ,p2通过求解要求B(1/3)=(cos(a / 3),sin(a / 3))和B(2/3)=(cos(2a / 3),sin(图2a / 3))。 (换句话说,要求贝塞尔曲线穿过弧中两个均匀间隔的点)。

  2. 如果我们有一个仿射变换A,它将圆弧转成椭圆弧,变换的控制点Ap0,Ap1,Ap2,Ap3是否定义了椭圆弧的良好贝塞尔近似?

当然,p0和p3是曲线的起点和终点:(1,0)和(cos(a),sin(a))。

谢谢

这是任何椭圆弧作为三次贝塞尔曲线的一般解 。

误差最大程度上取决于起始角度和结束角度的差异。 通过将角度差限制在60°,我取得了很大的成功。 也就是说,我为每60°(或其一部分)制作一个单独的立方体片段并将它们链接在一起。

你的问题基本上问“这是半圆形/椭圆弧的良好近似”。

您可能想尝试计算B_y(a) - sin(a) (当然,将参数化方程式设置为两端以(-1,0)结束,在a的相同值处)对于曲线B(a) ,在图形上诸如Wolfram Alpha之类的实用程序可以对其进行绘图 ,并查看方差的大小,以及它是否适合您的目的。

如果您想要更精确和非直观的答案,您可以计算

 Integral (from 0 to K) [B_y(a) - sin(a)]^2 da / 2 

其中K是两个参数化曲线最终为(-1,0)a的值。

该积分与标准偏差的某些测量值相关/比例(稍微),并且将很好地用作数值分析。 如果它符合您所需的准确度,那么您就是好的。

如果您的转换基本上是线性的,那么您提到圆形与椭圆的仿射变换的第二个问题将给出与原始误差成比例的误差。 如果没有,您可以尝试使用转换的雅可比行列式来查看误差的变化情况。

我还发现了一个很好的半圆形Bezier近似分析,作者发现了一个非常性感的近似:

Bezier半圆

鉴于:

 xValueInset =直径* 0.05
 yValueOffset = radius * 4.0 / 3.0

 P0 =(0,0)
 P1 =(xValueInset,yValueOffset)
 P2 =(直径 -  xValueInset,yValueOffset)
 P3 =(直径,0)

P1和P2是你的控制点。 请注意,这近似于半圆:

 B(a) = [ (d/2)*cos(a)+d/2 , (d/2)*sin(a) ]