0

我是unity3d的新手,我想为动画对象制作一条路径。路径必须是#椭圆形路径#或者#弹簧形状路径#我认为有一种方法可以根据数学方程来绘制这条路径是真的吗?或者我应该使用 3dmax 绘制它。这个问题的任何帮助或相关教程?

谢谢

4

1 回答 1

1

这是在游戏中用鼠标绘制路径的有用链接

如果您想以编程方式绘制弹簧,可以使用 Catmullrom 或 Bezier 样条:

double bezier(double t, double p0,double p1,double p2,double p3){
    double t2 = t*t;
    double t3 = t2 * t;
    return (0.16667 *(  t3  *   (-p0 +  3 * p1 + -3 * p2 + p3) +    \
                    t2  *   (3 * p0 + -6 * p1 + 3 * p2) +       \
                    t   *   (-3*p0 + 3*p2) +                    \
                    1   *   (p0 + 4*p1 + p2)));
}
double catmullrom(double t, double p0,double p1,double p2,double p3){
    double t2 = t*t;
    double t3 = t2 * t;
    return (0.5 *(      (2 * p1) + (-p0 + p2) * t +(2*p0 - 5*p1 + 4*p2 - p3) * t2 +(-p0 + 3*p1- 3*p2 + p3) * t3));
}

输入 p0,p1,p2,p3 是特定段的 4 个控制点。要查看螺旋构建示例,可以在我的 Github 页面上找到此代码的其余部分。特别查看BuildPath()以了解如何使用这些函数来构建连续路径。我不喜欢链接到外部帐户,但我的使用示例对于 SO 答案来说有点太大了。

如果你想画一个椭圆,我能想到的最简单的方法是求解基本方程并建立一个点环:

List<Vector3> pts = new List<Vector3>();
for(float x=-2.0f; x<2.0f;x+=0.1){
    y = sqrt( (1-x^2/a^2) * b^2 );//from eq. x^2/a^2 + y^2/b^2=1; 
    pts.Add(new Vector3(x,y,0));
}

该代码假设您有一个水平主轴,其中“a”是水平主轴的半径,“b”是垂直短轴的半径。首先沿 X/Y 轴构建椭圆,然后应用您希望定位椭圆的任何变换。

或者,我没有这方面的代码,您可以使用一般参数方程来生成一个已经偏离原点的旋转椭圆。

于 2013-01-09T01:35:54.363 回答