【问题标题】:Cocos2D Bezier curve around object as if by gravityCocos2D Bezier 曲线围绕物体,仿佛受重力作用
【发布时间】:2011-09-09 00:22:24
【问题描述】:

我正在尝试操纵一个对象。当它靠近另一个物体时,比方说地球,我希望地球对原始物体产生引力。我知道我应该使用CCBezierTo,所以这与其说是一道编程题,不如说是一道数学题。

从数学上讲,我如何计算出贝塞尔曲线的三个点(1、2 和末端)并根据其距离赋予其权重(越远 = 拉力越小)。我已经在变量中绘制了距离。

想象一艘宇宙飞船在月球周围弹弓。

代码:

ccBezierConfig bezier;
bezier.controlPoint_1 = ccp(projectile.position.x + 10, projectile.position.y + 20);
bezier.controlPoint_2 = ccp(projectile.position.x + 20, projectile.position.y + 40);
bezier.endPosition = ccp(projectile.position.x + 30, projectile.position.y+60);
id bezierAction = [CCBezierTo actionWithDuration:1 bezier:bezier];
[projectile stopAllActions];
[projectile runAction: bezierAction];

【问题讨论】:

  • 你为什么不将力矢量施加到与物体距离的平方成正比的射弹上?即为什么不只是“做重力”?假设射弹没有直接朝向物体的中心,路径将自然弯曲。

标签: objective-c cocos2d-iphone physics bezier gravity


【解决方案1】:

轨迹将是一个圆锥截面(直线、双曲线、抛物线、椭圆或圆)。

您可以将它们表示为有理贝塞尔曲线。 http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/NURBS/RB-conics.htmlhttp://www.cs.unc.edu/~dm/UNC/COMP236/papers/farin.pdf.

如果你坚持使用二次贝塞尔曲线,我会使用这样的函数 http://www.netlib.org/minpack/lmder.f 寻找控制点的最佳位置 通过最小二乘法最小化。

我认为如果你只计算圆锥部分并将它们绘制为线循环,那将是最简单的。

或者您实现一个 verlet 积分器并求解运动方程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多