gpt4 book ai didi

c++ - 绘制贝塞尔曲线的各个部分

转载 作者:行者123 更新时间:2023-11-30 00:58:25 25 4
gpt4 key购买 nike

我正在编写代码以将四分之一椭圆近似为 Bézier curve .

现在完成后,我在绘制这条曲线的各个部分时遇到了麻烦。我需要一些帮助来选择控制点。

最初,我将控制点的距离与曲线起点的距离之比设为 0.51。

编辑:

pseudo code
import cairo [...]
ctx.moveto(0,y1)
ctx.curveto(0,y1/2,x1/2,0,x1,0)

这将导致从 (0,y1) 到 (x1,0) 的近似椭圆曲线,椭圆中心位于 (x1,y1)。

请注意参数化角度扫描为 pi/2。如果假设我想把它分成更像虚线图案的部分,那我该怎么做呢?例如,从 t = pi/6t = pi/3?如何选择控制点?

最佳答案

要使用单个立方圆弧近似四分之一圆,通常要做的是使中点正好在圆上并使用切线起点和终点方向。

这在任何合理的度量标准中都不是正式的“最佳”近似值,但很容易计算……例如,四分之一圆的魔数(Magic Number)是 0.5522847498。参见 this page一些细节...

要绘制椭圆弧,您可以只拉伸(stretch)圆弧的控制点(再一次不是数学上符合“最佳近似值”的东西)。

通用角度案例

可以使用以下方法计算此定义下通用角度的最佳弧(即贝塞尔曲线的中点位于弧的中间)...

1。对称立方贝塞尔弧的最大高度为 3/4 H 其中 H 是控制点的高度

考虑到如何使用 De Casteljau 算法或 my answer about explicit computation of a bezier curve 计算贝塞尔立方体的中点,这一点应该很清楚。 ;另见下图:

Height of midpoint of a symmetric Bezier cubic arc

y_mid = ((0+H)/2 + (H+H)/2)/2 = 3/4 H


2。圆绳中心的角度是底部角度的两倍

请参阅任何初等几何文本以获取证明。


最后将 L 命名为极值之间的距离,将 S 命名为对称贝塞尔曲线的(未知)控制臂,将 2*alpha 命名为圆的角度我们可以计算出近似值

3。 S = L (2/3) (1-cos(alpha))/(sin(alpha)**2)

这是从上面的等式和一些计算得出的;请参见下图的说明。

Control point distance computation

关于c++ - 绘制贝塞尔曲线的各个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6244272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com