3

我需要帮助来编写算法删除节点贝塞尔曲线。使用三次贝塞尔曲线,有两条曲线(P0、P1、P2、P3 和 Q0、Q1、Q2、Q3),它们有一个公共点(P3=Q0)。需要得到一条曲线(P0、R1、R2、Q3),重复两条曲线。如何找到控制点 R1、R2 的坐标?

谢谢!

4

1 回答 1

0

在一般情况下,不可能按照您的要求进行操作。您要求将自由度从 7 降低到 4,但保持相同的结果。较低自由度系统的代表功率无法与较高自由度系统的代表功率相匹配。唯一可能的是,如果更复杂的曲线仍然恰好位于更简单的空间中。例如,如果您的两条贝塞尔曲线来自用 points 细分一条父曲线R0, R1, R2, R3。使用 de Casteljau 算法,我们可以生成两条新曲线PQ,它们位于同一条原始曲线上,并且共享一个t沿原始曲线的距离点(在t[0,1])。

P0 = R0
P1 = R0*(1-t) + R1*t
X  = R1*(1-t) + R2*t
P2 = P1*(1-t) + X*t
Q3 = R3
Q2 = R2*(1-t) + R3*t
Q1 = X*(1-t) + Q2*t
Q0 = P3 = P2*(1-t) + Q1*t

如果这种关系不适用于您的原始点,那么您将不得不制作一个近似值。但是您可能会假装这种关系成立并只是反转方程式:

R1 = (P1 - P0*(1-t))/t
R2 = (Q2 - Q3*t)/(1-t)

在哪里

t = (Q0 - P2)/(Q1 - P2)

最后一个方程是问题,因为除非P2, Q0, Q1是共线的,否则它不会完全起作用。 t是一个标量,但Q1-P2通常是一个 n 维点。因此,您可以为每个维度单独求解并找到平均值,或者更复杂一些并最小化平方误差。

于 2012-01-30T17:35:45.077 回答