繁体   English   中英

如何删除Bezier曲线的节点,以便曲线的形状不会改变?

[英]How to remove a node of a Bezier curve so that the shape of the curve does not change?

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

谢谢!

在一般情况下,你不可能做你所要求的。 你要求从7自由度下降到4,但保持相同的结果。 较低DOF系统的代表功率与较高DOF系统的代表功率不匹配。 唯一可能的是,如果更复杂的曲线仍然发生在更简单的空间中。 例如,如果您的两条贝塞尔曲线来自将单个父曲线细分为点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维点。 因此,您可以针对每个维度单独求解并找到平均值,或者更复杂一些并最小化平方误差。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM