三次贝塞尔曲线,代入X求Y

Cpp初学者 2019-02-13 10:10:36
最近写个小游戏,有方块移动的动画,线性动画显得有些生硬,想用贝塞尔实现非线性动画。
如这个网址的图示:http://cubic-bezier.com/#.43,.04,.11,1.42

但是遇到个问题:
上面网站图示,是以x轴表示时间,y表示移动位置
查到的贝塞尔公式是:

问题1:公式中的t到底是啥?

看起来网站中图示和公式,好像一个是二维的,一个是一维的。

问题2:可不可以这么理解,上面网址图示,是两个贝塞尔公式的结果?

问题3(主要):我想如网站中图示,代入x值求出对应的y值。应该怎么做?求给个算法
我主要是想,分别代入0.1 0.2 0.3 ... 1.0,求出动画中方块的位置,10帧。
...全文
1224 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_ErDong 2020-10-10
  • 打赏
  • 举报
回复
验证了吗老哥?我目前也遇到这个问题了。

坐标点x公式 X(t) = (1-t)^3 * X1 + 3t(1-t)^2 * X2 + 3t^2(1-t) * X3 + T^3 * X4
坐标点Y公式 Y(t) = (1-t)^3 * Y1 + 3t(1-t)^2 * Y2 + 3t^2(1-t) * Y3 + T^3 * Y4

我觉得你这样效率应该不高,我的建议是把坐标带入贝塞尔方程里给解出来,只保留两个变量XY。这个公式出来了就好办了,直接带入X就能求出Y。

不知道这样子可行不。
shuice 2019-06-06
  • 打赏
  • 举报
回复 1
我正好遇到了同样的问题,搜索到了这个帖子,我想明白了 公式 p(t) = (1-t)^3 * P1 + 3t(1-t)^2 * P2 + 3t^2(1-t) * P3 + T^3 * P4的目的是用来绘制曲线的,t范围是[0-1], 比如当t=0.5的时候p(t)可能为(x=0.2, y=0.8) 楼主想知道的是当x=0.2的时候,求出y=0.8 因为公式 p(t) = (1-t)^3 * P1 + 3t(1-t)^2 * P2 + 3t^2(1-t) * P3 + T^3 * P4可以分为两个,分别是 坐标点x公式 X(t) = (1-t)^3 * X1 + 3t(1-t)^2 * X2 + 3t^2(1-t) * X3 + T^3 * X4 坐标点Y公式 Y(t) = (1-t)^3 * Y1 + 3t(1-t)^2 * Y2 + 3t^2(1-t) * Y3 + T^3 * Y4 根据坐标点x公式,带入X(t)=0.2,因为X1, X2, X3, X,4已知, 算一个一元三次方程 可以算出 t等于多少. 把t的值带入坐标点Y公式算出Y(t) 我还没有验证
NinjaYinJey 2019-02-18
  • 打赏
  • 举报
回复
例如: x = a, x1 = a1 bezier : |x + x1| = (x1 - x)(1 - t)^n + n(x1 - x)t^0 + ....... + (x1 - x)(1 - t)^(n - 1) + n(x1 - x)t^(n + 1) = P(x)
NinjaYinJey 2019-02-17
  • 打赏
  • 举报
回复
t --> 时间 比率 速率 密度 etc...... 贝塞尔曲线不是求点,而是求n的线性组合的方程。 x y --> x + y的线性组合。 贝塞尔方程和n维没有关系,它是独立的方程,所以不能通过x求出y。
schlafenhamster 2019-02-17
  • 打赏
  • 举报
回复
见:
三阶贝塞尔曲线Interpolator的应用
zgl7903 2019-02-16
  • 打赏
  • 举报
回复
Cpp初学者 2019-02-15
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
PolyBezier

您没有认真看我的描述吧?我不是需要画曲线,不是需要生存曲线,我需要,指定4个点的x值和y值,代入x值求出对应的y值
如图:
zgl7903 2019-02-14
  • 打赏
  • 举报
回复
zgl7903 2019-02-14
  • 打赏
  • 举报
回复
Cpp初学者 2019-02-14
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
贝塞尔曲线的数学原理

帖子我看了很多,还是没弄明白,可能是我数学基础不行,比较初中毕业没上了,大神能给个算法吗?

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧