Cirulo e cordenadas em px

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