车轮加速

时间:2017-01-03 09:14:47

标签: android math rotation acceleration

我正在尝试计算我实施的可旋转轮的加速度。

但我很难搞清楚如何计算。所以任何可以帮助我的提示都值得赞赏

轮子本身是在我的onDraw()方法上创建的。

如何旋转滚轮

@Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (rotationEnabled) {
            switch (motionEvent.getAction()) {
                case MotionEvent.ACTION_MOVE:
                    double currentAngle = getAngle(motionEvent.getX(), motionEvent.getY());

                    rotateMe((float) (startAngle - currentAngle));
                    startAngle = startAngle - currentAngle;
                    break;
                case MotionEvent.ACTION_UP:
                    break;
            }
        }
        return false;
    }

    private double getAngle(double xTouch, double yTouch) {
        double x = xTouch - (getMeasuredWidth() / 2d);
        double y = getMeasuredHeight() - yTouch - (getMeasuredHeight() / 2d);

        switch (getQuadrant(x, y)) {
            case 1:
                return Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI;
            case 2:
                return 180 - Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI;
            case 3:
                return 180 + (-1 * Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI);
            case 4:
                return 360 + Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI;
            default:
                return 0;
        }
    }

    private static int getQuadrant(double x, double y) {
        if (x >= 0) {
            return y >= 0 ? 1 : 4;
        } else {
            return y >= 0 ? 2 : 3;
        }
    }

    private void rotateMe(float degrees) {
        setRotation(degrees);
    }

更新

目标是设置计时器。这可以从几分钟到几小时。我需要加速从几分钟跳到几分钟。所有这些都应该取决于用户拖动车轮的速度

因此触摸后事件(当用户停止触摸滚轮时)。应该没有附加速度。

0 个答案:

没有答案