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

我可以使用什么公式来计算这样的bezier样条?
发布于 2009-12-10 18:42:19
刚刚发现我误解了你的问题。既然有起点和终点以及两个方向(切线),就不能使用单个cubic hermite splines吗?有什么额外的限制吗?
要计算起点切线和终点切线,只需使用起点和终点方向,并根据起点和终点之间的距离缩放它们(另外还有一些其他恒定系数,如0.5,这取决于您希望路径的曲线程度):
p0 = startpoint;
p1 = endpoint;
float scale = distance(p0, p1);
m0 = Vec2(cos(startangle), sin(startangle)) * scale;
m1 = Vec2(cos(endangle), sin(endangle)) * scale;我使用这个系统在我正在开发的游戏中插入相机路径,它工作得很好。
发布于 2012-06-01 00:37:35
我不记得我是从哪里得到的,但我一直在用这个:
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是起点和终点之间沿路径的比率。
https://stackoverflow.com/questions/1879179
复制相似问题