Как правильно расположить мяч в игре «Колесо»? - PullRequest
0 голосов
/ 26 мая 2019

У меня есть статическое количество слотов для номера в игре Wheel. Начните с номера 00 до номера 1 (по часовой стрелке). Количество позиций от 0 до 37 в моем массиве Collection. В настоящее время я удачно размещаю положение мяча в середине номера с 1 градусом. Но я не смог рассчитать правильное значение для каждой позиции, когда попытался пройти в числовой позиции.

Я уже пробовал возиться с расчетом, либо шарик посередине между числом, либо вне диапазона!

    public class WheelDisplay extends JPanel implements ConstantVariable {

    private Image image;
    private ImageObserver imageObserver;
    private float degrees = 1;
    private int post = 0;

    public WheelDisplay() {
        ImageIcon icon = new ImageIcon(IMAGE_LOCATION);
        image = icon.getImage();
        imageObserver = icon.getImageObserver();
    }

    /** Credit to stackoverflow forum : https://stackoverflow.com/questions/25923480/simple-circle-rotation-simulate-motion **/
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();

        int circleDiameter = Math.min(getWidth(), getHeight());
        double circleRadius = circleDiameter / 2;
        int offSetX = (getWidth() - circleDiameter) / 2;
        int offSetY = (getHeight() - circleDiameter) / 2;

        g2d.drawImage(image, offSetX, offSetY, circleDiameter, circleDiameter, imageObserver);

        g2d.setColor(Color.BLUE);
        int ballDiameter = (int) (circleDiameter * 0.02);
        int ballRadius =  ballDiameter / 2;

        Point p = getPointOnCircle(this.degrees, circleRadius * 0.9, circleRadius);

        int valueX = offSetX + p.x - ballRadius;
        int valueY = offSetY + p.y - ballRadius;
        g2d.fillOval(valueX, valueY, ballDiameter, ballDiameter);

        g2d.dispose();
    }

    private Point getPointOnCircle(float degress, double circleRadius, double innerCircleRadius) {

        //The calculation that allow ball sit in the middle of each number when spin
        double rads =  ((Math.PI  * degress) / 38);

        // Calculate the outter point of the line
        int xCordinate = Math.round((float) (innerCircleRadius + Math.cos(rads) * circleRadius));
        int yCordinate = Math.round((float) (innerCircleRadius + Math.sin(rads) * circleRadius));

        return new Point(xCordinate, yCordinate);
    }

    public void setDegree(int x) {
        this.degrees += 2;
        this.post = x; // The number of position coming from Collection (0-37)
    }
}

Мяч предполагает, что он сидит в середине каждых 38 чисел на изображении колеса.

Надеюсь, что кто-то может указать, какую часть я делаю неправильно!

Вот изображение, которое я использую.

My wheel Image without passing in number position

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...