首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算从点到点的bezier样条曲线

计算从点到点的bezier样条曲线
EN

Stack Overflow用户
提问于 2009-12-10 15:15:12
回答 2查看 8.4K关注 0票数 10

我有两个点在X,Y+旋转,我需要计算一个bezier样条(二次bezier的集合)来平滑地连接这两个点。(见图)点代表游戏中只能缓慢旋转的一个单位。所以从点A到点B,它必须走一条很长的路。附件中的图片显示了一条相当夸张的曲线,但你明白了。

我可以使用什么公式来计算这样的bezier样条?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-10 18:42:19

刚刚发现我误解了你的问题。既然有起点和终点以及两个方向(切线),就不能使用单个cubic hermite splines吗?有什么额外的限制吗?

要计算起点切线和终点切线,只需使用起点和终点方向,并根据起点和终点之间的距离缩放它们(另外还有一些其他恒定系数,如0.5,这取决于您希望路径的曲线程度):

代码语言:javascript
复制
p0 = startpoint;
p1 = endpoint;
float scale = distance(p0, p1);
m0 = Vec2(cos(startangle), sin(startangle)) * scale;
m1 = Vec2(cos(endangle), sin(endangle)) * scale;

我使用这个系统在我正在开发的游戏中插入相机路径,它工作得很好。

票数 5
EN

Stack Overflow用户

发布于 2012-06-01 00:37:35

我不记得我是从哪里得到的,但我一直在用这个:

代码语言:javascript
复制
Vector2 CalculateBezierPoint(float t, Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3)
{
      float u = 1 - t; 
      float tt = t*t;
      float uu = u*u;
      float uuu = uu * u;
      float ttt = tt * t;

      Vector2 p = uuu * p0; //first term
      p += 3 * uu * t * p1; //second term
      p += 3 * u * tt * p2; //third term
      p += ttt * p3; //fourth term

      return p;
}

其中t是起点和终点之间沿路径的比率。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1879179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档