我正在使用贝塞尔曲线在我正在制作的程序中绘制曲线。我有五分。这是我正在尝试创建的曲线的粗略草图。我正在尝试制作一条穿过 A、B、C、D 的曲线。但是,C 不是一个确定的点,它是曲线应该经过的位置以使其看起来像法国曲线的建议。C在45度从E出来。
有没有人对如何近似通过这些点的法国曲线有任何建议?
我正在使用贝塞尔曲线在我正在制作的程序中绘制曲线。我有五分。这是我正在尝试创建的曲线的粗略草图。我正在尝试制作一条穿过 A、B、C、D 的曲线。但是,C 不是一个确定的点,它是曲线应该经过的位置以使其看起来像法国曲线的建议。C在45度从E出来。
有没有人对如何近似通过这些点的法国曲线有任何建议?
您需要使用三次贝塞尔曲线。三次贝塞尔曲线由四个点定义,但不通过中间的两点,它们只是为 Bezier 指定一个向量。对你来说不幸的是,有无数条三次贝塞尔曲线可以“通过”你的四个点。
Don Lancaster 已就此撰写了一份文件(pdf)。这涉及到一些关于他使用的算法的非常有趣的细节。我怀疑你正在使用它的后记,但至少校长在那里。
这是 CodeProject 上的一篇文章,他们在其中构建了一个库,用于执行您尝试使用 C# 执行的操作。
贝塞尔曲线通过指定的第一个和最后一个控制点,内部控制点确定形状。如果你用 ABCDE 画一条曲线,它不会通过点 C。但你可以把它分成两条不同的曲线,在 C 之前和之后引入一个控制点,这样你就有 AB B' C 和 C C' D E。做 B', C 和 C' 共线,因此曲线将具有一阶连续性。
给定任意三个非共线点(A、B、D),您可以画一条连接它们的弧。
给定任何三个或四个点,您可以构建一条连接它们的贝塞尔曲线,看起来相当不错。(您可能不需要为了让曲线看起来漂亮而添加额外的点 C,但如果您愿意,当然可以。)
具体如何做到这一点取决于您使用的图形库。那你用的是什么库?
上面说的都是事实,但是我最近发现了一个小技巧。贝塞尔曲线不通过控制点,执行 p0 和 pn(第一个和最后一个)。但是有一个公式可以让你构造贝塞尔曲线通过给定点的曲线。您可以通过计算新的“虚构”控制点来做到这一点。遗憾的是,我只有 2 度曲线的公式,但我确信它可以概括。这里是:NEWPOINT(X)=P1(x)* 2-(P0(x)+P2(x))/2 与 Y 相同
这个公式给出了“新”P1 点(因为 p0 和 p2 是起点和终点),并且曲线通过“原始”P1。希望有帮助吗?还可以使用 Bernstain 多项式进行计算,这就是我的建议