5

我有 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))。

谢谢

4

2 回答 2

4

这是任何椭圆弧作为三次贝塞尔曲线的通用解决方案。

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

于 2011-04-08T00:14:27.647 回答
2

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

您可能想尝试在Wolfram Alpha等绘图实用程序上为您的曲线计算B_y(a) - sin(a)(当然,参数化您的方程以(-1,0)相同的值结束)来绘制它,并查看方差是多少,以及是否或不适合你的目的。aB(a)

如果您想要一个更精确且不直观的答案,您可以计算

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

其中 K 是a两条参数化曲线在 处结束的值(-1,0)

该积分与标准偏差的某种度量相关/成比例(某种程度上),并且可以很好地用作数值分析。如果它在您想要的精度范围内,那么您很好。

你的第二个问题,你提到一个圆到椭圆的仿射变换,如果你的变换基本上是线性的,会给你一个与你的原始误差成比例的误差。如果不是,您可以尝试使用变换的雅可比行列式来查看错误的变化情况。

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

贝塞尔半圆

给出:

xValueInset = 直径 * 0.05
yValueOffset = 半径 * 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) ]
于 2010-06-23T09:14:41.837 回答