我正在开发一款iPhone游戏,当您移动角色时,它会在您的角色之后创建一条路径(运动类似于蛇,但在转向方面却是弯曲的)。我现在做的方法是将玩家一直处于的所有顶点保持在一个数组中,然后在每个帧的每一帧上画一个圆。
我想继续使用贝塞尔曲线。我已经阅读了很多关于它们的文章,并且我对它们的理解非常好,但是我对数学的理解不是很好。我已经了解到,我应该使用DeCasteljau的算法在特定的t处分割曲线,但是我还没有找到要使用的公式以及如何在代码中实现该公式。
所以我目前拥有的是t = 1时曲线的所有控制点。现在我只想获取t
最佳答案
我设法使其正常运行,实际上是非常简单的数学运算。只需计算贝塞尔曲线的所有切线,就可以得到分数。
这是一些python:
def sliceBezier(points, t):
x1, y1 = points[0]
x2, y2 = points[1]
x3, y3 = points[2]
x4, y4 = points[3]
x12 = (x2-x1)*t+x1
y12 = (y2-y1)*t+y1
x23 = (x3-x2)*t+x2
y23 = (y3-y2)*t+y2
x34 = (x4-x3)*t+x3
y34 = (y4-y3)*t+y3
x123 = (x23-x12)*t+x12
y123 = (y23-y12)*t+y12
x234 = (x34-x23)*t+x23
y234 = (y34-y23)*t+y23
x1234 = (x234-x123)*t+x123
y1234 = (y234-y123)*t+y123
return [(x1, y1), (x12, y12), (x123, y123), (x1234, y1234)]
称呼它:
sliceBezier([(point1_x, point1_y),(controlpoint1_x, controlpoint1_y),(controlpoint2_x, controlpoint2_y),(point2_x, point2_y)], 0.23);