在画布中找到贝塞尔曲线的高度

4

我正在尝试为矩形创建一个简单的圆角。我已经使用bezierCurveTo方法创建了顶部,但是我必须玩弄控制点的y值来获得曲线的正确高度。如果我知道宽度和想要曲线通过的高度,是否有公式可以找到控制点的y值?我现在拥有的函数是:

c.moveTo(130,55);
c.bezierCurveTo(130,-18,0,-18,0,55);

-18是我需要将y值设定为的数值,以便使曲线大致通过y = 0。


你需要使用贝塞尔曲线及其全部功能,还是一个简单的圆形 arcTo 就能满足你的需求? - Phrogz
@Phrogz 从技术上讲不是,但我喜欢贝塞尔曲线在进入直线段的两侧更加笔直。正如我所提到的,我已经有一个可行的解决方案,只是想知道如果我再次遇到这个问题,该公式会是什么。 - qw3n
1个回答

6

针对这种受限版本的贝塞尔曲线,有一个简单的答案。从维基百科这里获取三次贝塞尔曲线的定义,并解出曲线上中点(t=0.5)时,y的最小值为:

1/4 Ymax + 3/4 Ymin

(Ymax 是起始点和终止点的 y 值,Ymin 是两个控制点的 y 值)。 或者,使中点为 0,
Ymin = -1/3 Ymax.

因此,由于您有Ymax = 55,因此Ymin必须为-1/3 * 55 = -18.333 .. - 这就是为什么在您的示例中18有效的原因。


我差点忘记了这个问题,谢谢你的答案。 - qw3n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接