Search code examples
javamathgeometrycoordinateshelix

How do I calculate the coordinates of the points of an helix?


The following code is called every 50ms.

// 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;
    }
}

Here is the output in a game. It generates two helices. I cannot control more than the radius.

I am looking for code I can easily customize to fit my preferences. How do I control the following aspects?

  • How fast the helix rises.

  • Where the helix begins.


Solution

  • Helix is circular shape with progressive Y value.

    // Start point
    private double x;
    private double y;
    private double z;
    
    private double degree;
    private double rY;
    @Override
    public void run() {
        // We use the same formula that is used to find a point of a circumference
        double rX = Math.cos(degree);
        double rZ = Math.sin(degree);
        // New point
        double pX = x + rX;
        double pY = y + rY;
        double pZ = z + rZ;
    
        if (degree > 2D * Math.PI) {
            degree = 0D;
        } else {
            degree = degree + 0.2D;
        }
        if (pY > 2D) {
            pY = 0D;
        } else {
            pY = pY + 0.02D;
        }
    }