Pintar metade de 1 circulo [RESOLVIDO]

Boa tarde pessoal, estou com uma duvida e não sei mais onde procurar, ja virei a API no avesso, mas como meu ingles não ajuda muito acho que ja passei pela solução e não a vi, tbm pesquisei aqui no forum, mas não achei nada do genero:

Preciso:
1- criar um circulo com determinada cor na tela;
2- após isso colocar um traço atravessando esse circulo;
3- logo após pintar do traço pra baixo de outra cor;

Meu problema está no passo 3.
O 1 e o 2 ja consegui fazer tranquilo lendo a API, mas no 3, não sei como selecionar somente a parte de baixo do circulo, tentei um setClip(), mas ele pega a area do retangulo toda e não somente a parte do circulo.
Alguem pode me ajudar?
Acredito que seja coisa simples, mas como sou muito “cabeça de bagre”, não estou sabendo fazer.
segue abaixo a parte do meu codigo onde faço os passos 1 e 2;

    public void paint(Graphics g) {
        Graphics2D g2d2 = (Graphics2D)g;
        g2d2.setColor(Color.blue);
        g2d2.fillOval(5, 5, 300, 300);
        g2d2.setColor(Color.WHITE);
        g2d2.setStroke(new BasicStroke(2.0f));
        g2d2.drawLine(5, 155, 305, 155);
        g2d2.setPaint(Color.orange);
        //A PARIR DESSE PONTO NÃO SEI MAIS O QUE FAZER
    }

Agradeço dicas, criticas, xingamentos e orações…rsrs

Você consegue as coordenadas dos pontos desse círculo?
se conseguir, dá pra usar o método FillPolygon!

entendi, mas quais pontos preciso pegar?

Pega o ponto do centro,
por exemplo,
(100,100)
aí vc sabe que a linha do centro varia de (a,100) até (b,100).

onde a = menor valor de x e b= maior valor de x.

Para colorir a metade de cima, vc colore os pontos (100,c)
Para colorir a metade de baixo, vc colore os pontos (100,d)
onde c = valores de Y menores que 100 e d = valores de Y maiores que 100.

Alguém me corrija se eu estiver errado.

Tentei mas acho que to fazendo errado, ele ta pintando fora, veja como o codigo ficou:

public void paint(Graphics g) { Graphics2D g2d2 = (Graphics2D)g; g2d2.setColor(Color.blue); g2d2.fillOval(5, 5, 300, 300); g2d2.setColor(Color.WHITE); g2d2.setStroke(new BasicStroke(2.0f)); g2d2.drawLine(5, 155, 305, 155); g2d2.setPaint(Color.orange); int[] xPoints = new int[145]; int[] yPoints = new int[145]; for (int i=156;i <300;i++ ){ yPoints[i-155] = i; xPoints[i-155] = 156; } g2d2.fillPolygon(xPoints, yPoints, 145); }

não sei se dá para fazer com Graphics2d, mas com BufferedImage, você poderia pegar o width da imagem, dividir por 2 (pra pegar a metade), e pintar do width 0 até o getWidth()/2 e toda a altura…

não sei se ajuda, mas talvez pensando assim você consiga :wink:

boa sorte

Não adiantaria apenas dividir por 2, pois nem sempre esse traço vai ficar no meio do circulo, sua posição será calculada sempre, ou seja, as partes não ficam iguais obrigatoriamente, consegui fazer 2 semi-circulos um abaixo do outro, mas calcular o tamanho de cada um na hora de dar um repaint(); não é tão simples, gostaria de fazer o desenho e traçar a reta pra depois pintar, fica mais simples e mais correto.
Mas…
Se no final não der certo vou acabar partindo pra outra opção mesmo.
Valeu.

http://developer.classpath.org/doc/java/awt/geom/Arc2D.html

Veja “CHORD”

sim, eu fiz dessa forma, mas pra calcular onde vai ser a semireta que divide o circulo da um trabalho danado, pois as informarções que tenho são angulos, do eixo X,Y eZ.
Se o eixo Z estiver com 10° por exemplo , vou precisar subir essa linbha que divide o circulo, deixando a parte debaixo maior que a de cima, estou tentando outra forma aqui, mas estou quase desistindo e deixando pra amanhã, estou desde as 9hs da manhã nisso.

Pessoal, agradeço a atenção de todos, acabei fazendo com o Arc2D mesmo por falta de outra alternativa, fiz os calculos e consegui colcar o quer queria.
Novamente muito obrigado