Ir para o conteúdo
Carlitox

Movimento circular de uma bola

Mensagens Recomendadas

Carlitox    0
Carlitox

Olá a todos,

Precisava de uma ajudinha. Preciso fazer uma aplicação em que uma bola descreva um movimento circular através de um raio.

Segue abaixo o código que tenho implementado.

Nesta linha:  //AQUI CALCULAR COORDENADAS MOVIMENTO CIRCULAR

É onde preciso calcular as coordenadas para desenhar o movimento circular.

public class Ball {
    //... Constants
    final static int DIAMETER = 8;

    //... Instance variables
    private int m_x;           // x and y coordinates upper left
    private int m_y;

    private int m_velocityX;   // Pixels to move each time move() is called.
    private int m_velocityY;

    private int m_rightBound;  // Maximum permissible x, y values.
    private int m_bottomBound;

    //======================================================== constructor
    public Ball(int x, int y, int velocityX, int velocityY) {
        m_x = x;
        m_y = y;
        m_velocityX = velocityX;
        m_velocityY = velocityY;
    }

    //======================================================== setBounds
    public void setBounds(int width, int height) {
        m_rightBound  = width  - DIAMETER;
        m_bottomBound = height - DIAMETER;
    }

    //============================================================== move
    public void move() {
        //... Move the ball at the give velocity.

        if(m_y > 330)
        {
            //m_x -= m_velocityX;
            m_y -= m_velocityY;
        }
        else
        {
        //m_x -= m_velocityX;
        //m_y -= m_velocityY;    

        //AQUI CALCULAR COORDENADAS MOVIMENTO CIRCULAR  
        
        //... Bounce the ball off the walls if necessary.
        if (m_x < 35) {                  // If at or beyond left side
            m_x         = 35;            // Place against edge and
            m_velocityX = -m_velocityX; // reverse direction.

        } else if (m_x > m_rightBound) { // If at or beyond right side
            m_x         = m_rightBound;    // Place against right edge.
            m_velocityX = -m_velocityX;  // Reverse direction.
        }

        if (m_y < 35) {                 // if we're at top
            m_y       = 35;
            m_velocityY = -m_velocityY;

        } else if (m_y > m_bottomBound) { // if we're at bottom
            m_y       =  m_bottomBound;
            m_velocityY = -m_velocityY;
        }
       }
    }

    //============================================================== draw
    public void draw(Graphics g) {
         g.setColor(Color.GREEN);
        g.fillOval(m_x, m_y, DIAMETER, DIAMETER);
    }



    //============================================= getDiameter, getX, getY
    public int  getDiameter() { return DIAMETER;}
    public int  getX()        { return m_x;}
    public int  getY()        { return m_y;}

    //======================================================== setPosition
    public void setPosition(int x, int y) {
        m_x = x;
        m_y = y;
    }
}

Agradeço desde já atenção.

Carlos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Preciso fazer uma aplicação em que uma bola descreva um movimento circular através de um raio.

        //AQUI CALCULAR COORDENADAS MOVIMENTO CIRCULAR  

Parece-me que te falta alguma coisa ...

Onde é que está o raio?

Para que serve a velocidade X e Y no cálculo da posição?

Acho que seria bom teres um centro de rotação e uma velocidade de rotação (radianos (ou graus) por move()).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Carlitox    0
Carlitox

Resolvido ;)

int raio = 170;
          
                c_x = 275;
                c_y = 330;
                
                i++;
                angulo = 2 * Math.PI / 180;
                m_x = (int) (raio * Math.cos(angulo * i) + c_x);
                m_y = (int) (raio * Math.sin(angulo * i) + c_y);
            

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade