gpt4 book ai didi

math - 如何删除贝塞尔曲线的节点,使曲线的形状不改变?

转载 作者:行者123 更新时间:2023-12-02 05:08:15 25 4
gpt4 key购买 nike

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

谢谢!

最佳答案

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

关于math - 如何删除贝塞尔曲线的节点,使曲线的形状不改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8687648/

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