以下代码每50毫秒调用一次。

// Start point
private double x;
private double y;
private double z;

private double y1;
@Override
public void run() {
    double x1 = Math.cos(y1);
    double z1 = Math.sin(y1);
    double y2 = 4D - y1;
    double x2 = Math.sin(y2);
    double z2 = Math.cos(y2);
    // First new point
    double pX1 = x + x1;
    double pY1 = y + y1;
    double pZ1 = z + z1;
    // Second new point
    double pX2 = x + x2;
    double pY2 = y + y2;
    double pZ2 = z + z2;

    if (y1 > 4D) {
        y1 = 0D;
    } else {
        y1 = y1 + 0.1D;
    }
}


这是游戏的输出。它产生两个螺旋。
我控制不了半径。



我正在寻找可以轻松自定义以适合我的偏好的代码。
如何控制以下几个方面?


螺旋上升的速度。





螺旋开始的位置。

最佳答案

螺旋线是圆形,平面呈“线性”运动


您将平面xz用作螺旋底线并将y轴用作高度
所以你需要:
r-半径
d-两个螺丝之间的距离(整圈后的y移动)
t-参数<0,1>确定螺旋位置
h0,h1-螺旋的起始终点高度(y轴)
a0-角起始位置[rad]


现在如何获得螺旋上的点作为参数的函数,这些参数

aa=fabs(h1-h0)*2.0*M_PI/d; // angular speed coefficient
// if you need opposite angular direction then add aa=-aa;
x=r*cos(a0+aa*t);
z=r*sin(a0+aa*t);
y=h0+((h1-h0)*t);



aa可以预先计算一次
现在,如果t=0.0,那么您将获得螺旋的起点
如果t=1.0,则得到了螺旋的端点
因此速度就是每个计时器周期在动画中添加到t的速度
d控制螺丝环的数量
h1-h0是螺旋高度
代码是C ++语言(对不起,我不是JAVA编码器)

关于java - 如何计算螺旋点的坐标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28195990/

10-10 19:33