贝塞尔曲线与线段的交点

2024-03-13

我正在用 Python(使用 pygame)编写一个游戏,它要求我为每个新游戏生成随机但美观的“海洋”。经过长时间的搜索,我确定了一种涉及贝塞尔曲线的算法,如padlib.py http://www.pygame.org/project-Pygame+Advance+Graphics+Library-660-.html。我现在需要弄清楚 padlib 生成的曲线何时与线段相交。

蛮力方法是仅使用 padlib 生成的一组近似线段来找到答案。然而,我怀疑可以通过分析找到更好的答案。我只有几十个样条线段 - 搜索它们应该比数千个线段更快。

一点搜索让我走上了这条路:贝塞尔曲线 ->Kochanek-Bartels 样条 http://en.wikipedia.org/wiki/Kochanek%E2%80%93Bartels_spline -> 三次厄米样条 http://en.wikipedia.org/wiki/Cubic_Hermite_spline

在最后一页,我找到了这个函数:

p(t) = h00(t)p0 + h10(t)m0 + h01(t)p1 + h11(t)m1

where p(t) is a actually a point (2-dimensional vector), hij(t) functions are cubic polynomials, p0, p1, m0 and m1 are points I can get from padlib code.

Now, I can see that the solution to my problem is p(t) = u + v * t1, where u and v are the end of my line segment.

然而,找出解析解超出了我的能力范围。这里有人知道现有的解决方案吗?或者可以帮我解方程吗?


作为粗略轮廓,旋转和平移系统,使线段位于 X 轴上。现在 y 坐标是参数 t 的三次函数。找到“零”(解析公式可以在好的数学文本或维基百科中找到)。现在评估与这些零点相对应的 x 坐标并针对您的线段进行测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贝塞尔曲线与线段的交点 的相关文章

随机推荐