Может ли кто-нибудь объяснить эту логику циферблата в аналоговом примере часов Android

Привет, я шел через образец аналоговых часов. В методе onDraw я наткнулся на эту логику

 @Override
    public void onDraw(Canvas canvas, Rect bounds) {
        mTime.setToNow();

        // Draw the background.
        if (isInAmbientMode()) {
            canvas.drawColor(Color.BLACK);
        } else {
            canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), mBackgroundPaint);
        }

        // Find the center. Ignore the window insets so that, on round watches with a
        // "chin", the watch face is centered on the entire screen, not just the usable
        // portion.
        float centerX = bounds.width() / 2f;
        float centerY = bounds.height() / 2f;

        float secRot = (mTime.second / 30f) * (float) Math.PI;
        int minutes = mTime.minute;
        float minRot = minutes / 30f * (float) Math.PI;
        float hrRot = ((mTime.hour + (minutes / 60f)) / 6f) * (float) Math.PI;

        float secLength = centerX - 20;
        float minLength = centerX - 40;
        float hrLength = centerX - 80;

        if (!mAmbient) {
            float secX = (float) Math.sin(secRot) * secLength;
            float secY = (float) -Math.cos(secRot) * secLength;
            canvas.drawLine(centerX, centerY, centerX + secX, centerY + secY, mHandPaint);
        }

        float minX = (float) Math.sin(minRot) * minLength;
        float minY = (float) -Math.cos(minRot) * minLength;
        canvas.drawLine(centerX, centerY, centerX + minX, centerY + minY, mHandPaint);

        float hrX = (float) Math.sin(hrRot) * hrLength;
        float hrY = (float) -Math.cos(hrRot) * hrLength;
        canvas.drawLine(centerX, centerY, centerX + hrX, centerY + hrY, mHandPaint);
    }

Я не понимаю, каков точный смысл этих строк

float secRot = (mTime.second / 30f) * (float) Math.PI;
    int minutes = mTime.minute;
    float minRot = minutes / 30f * (float) Math.PI;
    float hrRot = ((mTime.hour + (minutes / 60f)) / 6f) * (float) Math.PI;

1 ответ

Кажется, что он пытается вычислить угол поворота каждой из рук. Он перемещает секундную и минутную стрелки независимо, но перемещение часовой стрелки также зависит от минут. В "12:30" часовая стрелка будет между 12 и 1.

Другие вопросы по тегам