gpt4 book ai didi

math - 分割贝塞尔曲线

转载 作者:行者123 更新时间:2023-12-04 02:59:32 25 4
gpt4 key购买 nike

我正在开发一款 iPhone 游戏,它会在你移动时在你的角色后面创建一条路径(运动类似于蛇,但在转向方面是弯曲的)。我现在这样做的方法是将玩家所在的所有顶点保存在一个数组中,然后在每一帧的每个顶点上画一个圆圈。

我想继续使用贝塞尔曲线。我已经阅读了很多关于它们的书,我对它们的理解非常好,但我的数学并不是很好。我已经明白我应该使用 DeCasteljau 的算法在特定的 t 处分割曲线,但我还没有找到要使用的公式以及如何在代码中实现它。

所以我目前拥有的是 t=1 曲线的所有控制点。现在我只想获得 t<1 的所有控制点。有人可以给我一个易于理解的数学公式或实现(最好在python或objective-c中)。也许您甚至可以在 iphone sdk 中使用一个对象来分割曲线?

最佳答案

我设法让它工作,实际上非常简单的数学。只需计算贝塞尔曲线的所有切线即可获得分数。

这是一些 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);

关于math - 分割贝塞尔曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369488/

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