Oi pessoal, estou com um problema e preciso de ajuda para resolver, ou pelo menos uma luz.
Tenho uma imagem de 500x500;
o centro dela é pX: 250 pY: 250;
e tenho um circulo desenhado sobre essa imagem (GraphicsContext.fillOval(pX=0,pY=0, 500);
o circulo também possui tamanho 500x500, logo seu centro tambem é pX: 250 pY: 250
e aqui começa o problema.
preciso puxar 9 Raios nesse circulo, raio é metade do diâmetro (GraphicsContext.strokeLine(250, 250, 0, 250));
e de alguma forma obter o pX e pY por onde esses raios passarem
eu já quebrei a cabeça de toda forma que vocês pensarem, e não consegui, se alguem tiver um luz alguma coisa q seja, por favor, não exite em me ajudar, obrigado.
obs. estou utilizando GraphicsContext para fazer os testes.
Para fazer 9 raios, você precisa saber quantos graus separam cada raio: 360 / 9 = 40 graus
Quando você manipula gráficos 2D, é comum precisar calcular as coordenadas X e Y a medida que quer fazer transformações, no seu caso essa transformação será a rotação.
Você vai desenhar linhas do centro até a borda do circulo, então vamos dizer que você vai desenhar a primeira linha no ângulo 0.
Você sabe qual é o centro é x=250 e y=250
Então o primeiro raio é só desenhar a linha A(250, 250) B(500, 250)
O seu ponto A sempre vai ser (250, 250), pois é o centro, você agora vai variar o ponto B que no momento é (500, 250)
Agora pra calcular os outro 8 raios, é fácil, lembre-se, x é cosseno e y é seno
Exemplo:
public class Exemplo extends JFrame {
public static void main(String[] args) {
try {
Exemplo programa = new Exemplo();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
private Exemplo() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container container = getContentPane();
container.setLayout(new BorderLayout());
container.add(new JPanel() {
@Override
protected void paintComponent(Graphics g) {
desenhar(g);
}
}, BorderLayout.CENTER);
}
private void executar() {
setSize(640, 640);
setLocationRelativeTo(null);
setVisible(true);
}
private void desenhar(Graphics g) {
int raios = 9; // é só alterar essa variável pra desenhar mais ou menos raios
int separacao = 360 / raios;
int centroX = 250;
int centroY = 250;
int raio = 250;
// circulo
g.drawOval(0, 0, raio * 2, raio * 2);
Point a = new Point(centroX, centroY);
Point b = new Point(centroX + raio, centroY);
// primeiro raio
g.drawLine(a.x, a.y, b.x, b.y);
int graus = separacao;
for (int i = 1; i < raios; i++) {
double rads = Math.toRadians(graus);
b.x = (int) (Math.cos(rads) * raio);
b.y = (int) (Math.sin(rads) * raio);
// raio seguinte
g.drawLine(a.x, a.y, centroX + b.x, centroY - b.y);
graus += separacao;
}
}
}
2 curtidas
cara não tenho palavras para te agradecer, você resolveu 70% de um problema q já me atormenta a uma semana, agora só preciso desenhar 9 bolas em cima de cada raio.
obrigado.
consegui resolver, agora realmente entendi o que voce quiz dizer, staroski muito, mais muito obrigado mesmo cara.
2 curtidas