我如何在 C 中实现一种简单的方法来为给定起点和终点的椭圆弧生成 2 个缺失的控制点?我不需要花哨的误差估计,只需要可以获取点 A 和 D 并为椭圆弧生成控制点 B 和 C 的东西,然后我可以在其中使用三次贝塞尔插值算法生成曲线。
有点像
void GetArcControlPoints(Point a, Point &b, Point &c, Point d)
{
.....
b = ...
c = ....
}
谢谢
最佳答案
你的问题背后的数学有一些缺陷:
贝塞尔曲线是单位区间 [0;1] 中参数 t 的多项式函数。椭圆是使用三角函数定义的,三角函数是超越的,因此不是代数的,因此也不是多项式的。您不能使用 Bézier 曲线(既不是三次曲线也不是任何阶数 n)生成椭圆弧。但是假设您只想近似椭圆弧。由于您没有指定近似值必须有多好,因此无法确保贝塞尔曲线对您来说“足够椭圆”。简而言之:您需要一个错误参数。
有无限条椭圆弧通过给定的两个点。因此,这两个点没有提供足够的信息来指定一个椭圆,然后可以使用贝塞尔曲线对其进行近似圆弧。
更糟的是,由于您想要的是椭圆弧,而不是整个椭圆,因此您还必须指定弧必须“覆盖”多少椭圆,以百分比表示(100% = 整个椭圆) .../p>
在数学运算正确之前,您不能进入下一步(编码)。
编辑:
由于您需要一个完整的椭圆,我建议使用两个或四个 Bézier 面片而不是一条 Bézier 曲线。
您可以将椭圆视为在其中一个维度上“拉伸(stretch)”的圆。现在,由于“拉伸(stretch)”变换是线性的,而贝塞尔函数在控制点上是线性的,您可以计算近似 90 度圆弧的贝塞尔曲线的控制点,然后将“拉伸(stretch)”变换应用于控制点,瞧,您将获得近似“90 度”椭圆弧的贝塞尔曲线的控制点。得到整个椭圆就是重复这个过程四次。
关于c++ - 生成三次贝塞尔椭圆弧的通用公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349459/