gpt4 book ai didi

geometry - 如何将三次曲线的 2 个控制点转换为二次曲线的单个控制点?

转载 作者:行者123 更新时间:2023-12-03 18:24:37 29 4
gpt4 key购买 nike

在网上搜索后,我在各种论坛上看到很多人暗示用二次曲线近似三次曲线。但是我找不到公式。

我想要的是这个:

输入:startX、startY、control1X、control1Y、control2X、control2Y、endX、endY
输出:startX、startY、controlX、controlY、endX、endY

实际上,由于起点和终点是相同的,所以我真正需要的是......

输入:startX、startY、control1X、control1Y、control2X、control2Y、endX、endY
输出: controlX, controlY

最佳答案

如前所述,从 4 个控制点到 3 个控制点通常是一个近似值。只有一种情况是精确的 - 当三次贝塞尔曲线实际上是一个度数提升的二次贝塞尔曲线时。

您可以使用度数高程方程得出近似值。这很简单,结果通常很好。

让我们称三次方 Q0..Q3 的控制点和二次方 P0..P2 的控制点。那么对于度数提升,方程是:

Q0 = P0
Q1 = 1/3 P0 + 2/3 P1
Q2 = 2/3 P1 + 1/3 P2
Q3 = P2

在您的情况下,您有 Q0..Q3 并且您正在解决 P0..P2。有两种方法可以根据上述等式计算 P1:
P1 = 3/2 Q1 - 1/2 Q0
P1 = 3/2 Q2 - 1/2 Q3

如果这是一个度数提升的三次方,那么两个方程都会对 P1 给出相同的答案。因为它可能不是,你最好的办法是平均它们。所以,
P1 = -1/4 Q0 + 3/4 Q1 + 3/4 Q2 - 1/4 Q3

翻译成您的条款:
controlX = -0.25*startX + .75*control1X + .75*control2X -0.25*endX

Y 的计算方式类似 - 维度是独立的,因此这适用于 3d(或 n-d)。

这将是一个近似值。如果您需要更好的近似值,获得它的一种方法是使用 deCaSTLejau 算法分割初始三次方,然后对每个段进行度约。如果您需要更好的连续性,还有其他不那么快速和肮脏的近似方法。

关于geometry - 如何将三次曲线的 2 个控制点转换为二次曲线的单个控制点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009160/

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