在贝塞尔曲线上均匀分布对象

时间:2012-08-16 03:03:26

标签: actionscript-3 math

有人可以告诉我这种疯狂是如何运作的: http://www.youtube.com/watch?v=KL8QLLmUvbg

具体而言,我对沿路径均匀分布给定数量的正方形感兴趣。我也想知道这是否适用于多个线段 - 这是一个弯曲的线段,我需要一个解决方案,在一条大线上分配对象,其中包含多条曲线。

基本上我正试图制作一个真实地跟随角色的尾巴。

由于

3 个答案:

答案 0 :(得分:6)

首先,Bezier样条曲线是由t参数化的曲线。但是t沿曲线不是弧长。所以程序就是这样。

  1. 计算贝塞尔曲线的长度。
  2. 找到将曲线分成N个相等长度段的t值。
  3. 但是这两个步骤很棘手。

    第一个只有二次贝塞尔曲线的闭合形式解。 (你可以找到解决方案here) 否则你使用细分和近似方法,或数值积分方法(在某种意义上这些是等价的 - 我会采用数值积分方法,因为这有更好的可证明行为,代价是稍微棘手的实现,但你可能或可能不在乎。)

    第二个基本上是猜测t值,并改进方法(使用与步骤1相同的每一步计算方式)。我使用割线样式搜索来实现这一点,因为我怀疑使用牛顿方法搜索所需的衍生物太昂贵而无法计算。

    一旦获得了对象的位置,就需要使用曲线切线和余切来为对象创建局部参考框架。这允许对象很好地坐在曲线的路径中,而不是全部具有相同的方向。请注意,这仅适用于2D - 在3D中,您仍然可以通过面向对象获得一些奇怪的行为。

答案 1 :(得分:0)

您可以从查看贝塞尔曲线的计算方法开始。 Wikipedia有一些很好的动画和解释,this link有一些as3代码。

但如果您正在尝试创建尾部,则可以采用更简单的方法,例如使用以下行为或物理库

答案 2 :(得分:0)

我最终创建了一个像丹尼尔为简单起见而推荐的以下行为系统。但是为了详细阐述迈克尔的精彩答案,我偶然发现了这个详细介绍样条技术的教程。

http://gamedev.tutsplus.com/tutorials/implementation/create-a-glowing-flowing-lava-river-using-bezier-curves-and-shaders/