@Override
    protected void updateAnimation(double p) {
        double dTheta;
        switch (rotationStrategy) {
            case (ROTATE_CLOCKWISE): {
                dTheta = (fTheta - iTheta >= 0) ? (fTheta - iTheta) : ((fTheta - iTheta) % (2 * Math.PI) + (2 * Math.PI));
                break;
            }
            case (ROTATE_COUNTERCLOCKWISE): {
                dTheta = (fTheta - iTheta <= 0) ? (fTheta - iTheta) : ((fTheta - iTheta) % (2 * Math.PI) - (2 * Math.PI));
                break;
            }
            default : {
                dTheta = fTheta - iTheta;
                if (Math.abs(dTheta) > (Math.PI)) {
                    dTheta = dTheta % (2 * Math.PI) - (2 * Math.PI) * ProjUtils.getSign(dTheta);
                }
            }
        }

        cTheta = dTheta * p + iTheta;
        this.cX = orbit.getRoundX(cTheta);
        this.cY = orbit.getRoundY(cTheta);
    }