gpt4 book ai didi

math - 三次贝塞尔曲线段

转载 作者:行者123 更新时间:2023-12-04 22:14:54 25 4
gpt4 key购买 nike

如果我有描述贝塞尔曲线 P1、P2、P3、P4 的 4 个点(其中 P1 和 P4 是曲线的端点,P2 和 P3 是曲线的控制点),我怎么能找到描述的点只有这条贝塞尔曲线的一部分?

我找到了这个 answer这正是我正在寻找的,但答案似乎是错误的。如果我在应表示整个贝塞尔曲线的方程中设置 t0=0 和 t1=1,则结果点无效。它们不等于原始点。

似乎该解决方案与De Casteljau's algorithm有关,但我无法理解它是如何工作的。

最佳答案

是的,De Casteljau's algorithm是要走的路。
参数化
如果您的曲线从 t=0 到 t=1 没有正确参数化,那么您似乎使用了错误的方程来描述您的曲线。 Wikipedia有正确的公式给你:

B(t) = (1−t)3 P1 + 3(1−t)2t P2 + 3(1−t)t2 P3 + t3 P4

[I adjusted the indices from the zero-based form in Wikipedia to the one-based from your question.]


如果你设置 t=0,你会得到 P1,你的起点。如果您设置 t=1,您将获得 P4,即您的端点。在两者之间,曲线的形状由这些点和两个控制点 P2 和 P3 决定。
De Casteljau 算法
让 t 成为您想要切割曲线的参数。假设您只想保留初始部分。你画了三条线,从 P1 到 P2,从那里到 P3,再从那里到 P4。每条线都以其长度的分数 t 进行分割,即分割点之前的线的长度与作为 t 的整个长度相关: 1. 现在您有三个新点 P12 到 P34。再做同样得到两点P123和P234,再次得到单点P1234。最后一点是 B(t),即截断曲线的端点。起点和以前一样是P1。新的控制点是我们刚刚构建的 P12 和 P123。
删除曲线的初始部分的工作方式相同。因此,您可以通过两个步骤修剪曲线的两端。您将获得一组新的控制点,这些控制点精确地(达到您使用的数值精度)描述原始曲线的一段,不涉及近似值或类似的内容。
您可以将上述所有几何描述转换为代数公式,在理想情况下,您应该得出 this answer 的结果。你引用的问题。
唉,这似乎不是一个完美的世界。在撰写本文时,这些公式仅使用二阶多项式,因此它们无法描述三阶曲线上的端点。正确的公式应该如下:
  • P'1 =
    u0u0u0 P1 +
    (t0u0u0 +
    u0t0u0 +
    u0u0t0) P2 +
    (t0t0u0 +
    u0t0t0 +
    t0u0t0) P3 +
    t0t0t0 P4
  • P'2 =
    u0u0u1 P1 +
    (t0u0u1 +
    u0t0u1 +
    u0u0t1) P2 +
    (t0t0u1 +
    u0t0t1 +
    t0u0t1) P3 +
    t0t0t1 P4
  • P'3 =
    u0u1u1 P1 +
    (t0u1u1 +
    u0t1u1 +
    u0u1t1) P2 +
    (t0t1u1 +
    u0t1t1 +
    t0u1t1) P3 +
    t0t1t1 P4
  • P'4 =
    u1u1u1 P1 +
    (t1u1u1 +
    u1t1u1 +
    u1u1t1) P2 +
    (t1t1u1 +
    u1t1t1 +
    t1u1t1) P3 +
    t1t1t1 P4

  • 其中 u0 = 1 − t0 和 u1 = 1 − t1。
    请注意,在括号中的表达式中,至少有一些术语是相等的并且可以组合。我没有这样做,因为这里所说的公式会使模式更清晰,我相信。您可以简单地对 x 和 y 方向独立执行这些计算,以计算您的新控制点。

    关于math - 三次贝塞尔曲线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11703283/

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