gpt4 book ai didi

math - 二次贝塞尔曲线 : Calculate t given x

转载 作者:行者123 更新时间:2023-12-02 03:29:42 25 4
gpt4 key购买 nike

再会。我正在使用具有以下配置的二次贝塞尔曲线:

起点 P1 = (1, 2)
anchor P2 = (1, 8)
终点 P3 = (10, 8)

我知道给定一个 t,我知道我可以使用以下等式求解 x 和 y:

t = 0.5; // given example value
x = (1 - t) * (1 - t) * P1.x + 2 * (1 - t) * t * P2.x + t * t * P3.x;
y = (1 - t) * (1 - t) * P1.y + 2 * (1 - t) * t * P2.y + t * t * P3.y;

其中 P1.x 是 P1 的 x 坐标,依此类推。

我现在尝试的是,给定一个 x 值,我使用 wolframalpha 计算 t,然后将该 t 代入 y 方程,然后得到 x 和 y 点。

但是,我想自动查找 t 然后是 y。我有一个公式可以在给定 t 的情况下获得 x 和 y。但是,我没有根据 x 获得 t 的公式。我对我的代数有点生疏,扩展第一个方程来隔离 t 看起来不太容易。

有没有人有基于 x 得到 t 的公式?到目前为止,我的谷歌搜索技能让我失望。

我认为还值得注意的是,我的贝塞尔曲线朝向正确。

任何帮助将不胜感激。谢谢。

最佳答案

问题是你要解决的不是一般的功能

  • 对于任何 t只是一个 (x,y)
  • 但对于任何 x可以有 0,1,2,+inf t 的解决方案

  • 我会反复执行此操作
    你已经可以得到任何点 p(t)=Bezier(t)所以使用 t 的迭代最小化距离 |p(t).x-x|
  • for(t=0.0,dt=0.1;t<=1.0;t+=dt)
  • 查找所有本地 min d=|p(t).x-x|的s
    所以当 d再次开始上升设置dt*=-0.1并停止如果 |dt|<1e-6或任何其他阈值。停止如果 t超出区间 <0,1>并记住一些列表的解决方案。恢复原版t,dt并重置本地最小搜索变量
  • 处理所有本地 min
    消除所有距离更大的所有阈值/精度计算y并做你需要的重点......

  • 它比代数方法慢得多,但您可以将其用于任何曲率,而不仅仅是二次曲率
    通常使用三次曲线,用它们代数做这件事是一场噩梦。

    关于math - 二次贝塞尔曲线 : Calculate t given x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791915/

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