Como desenhar um circulo perfeito na tela?

3 respostas
Vinicius_Zibetti_Res
package br.com.maxlider.base;

import java.awt.Color;
import java.awt.Point;

/**
 * 
 * @author Max Lider Classe responsavel pelas Elipses (Circulos)
 */
public class Elipse implements Shape {
	private Point initialPoint;
	private Point finalPoint;
	private Integer width;
	private Integer heigth;
	private Integer pointx;
	private Integer pointy;
	private Color color;

	/**
	 * @param initialPoint
	 *            Ponto Inicial da Elipse
	 * @param finalPoint
	 *            Ponto Final da Elipse
	 * @param color
	 *            Cor da Elipse
	 */
	public Elipse(Point initialPoint, Point finalPoint, Color color) {
		this.initialPoint = initialPoint;
		this.finalPoint = finalPoint;
		this.color = color;
	}

	/**
	 * Retorna a largura da elipse, de acordo com seu ponto inicial, e final.
	 * 
	 * @return
	 */
	public int getWidth() {
		if (getInitialPoint().x > getFinalPoint().x) {
			this.width = getInitialPoint().x - getFinalPoint().x;
			return this.width;
		} else {
			this.width = getFinalPoint().x - getInitialPoint().x;
			return this.width;
		}
	}

	/**
	 * Retorna a Altura da Elipse, de acordo com seu ponto inicial, e final.
	 * 
	 * @return
	 */
	public int getHeight() {
		if (getInitialPoint().y > getFinalPoint().y) {
			this.heigth = getInitialPoint().y - getFinalPoint().y;
			return this.heigth;
		} else {
			this.heigth = getFinalPoint().y - getInitialPoint().y;
			return this.heigth;
		}

	}

	public Point getInitialPoint() {
		return initialPoint;
	}

	public Point getFinalPoint() {
		return finalPoint;
	}

	public Integer getPointx() {
		return pointx;
	}

	public Integer getPointy() {
		return pointy;
	}

	public Color getColor() {
		return color;
	}

	/**
	 * Metodo organiza as coordenadas dos eixos X e Y para direcionar
	 * corretamente a rendenizacao.
	 */
	public void draw() {
		pointx = getInitialPoint().x;
		pointy = getInitialPoint().y;
		if (getInitialPoint().x > getFinalPoint().x && getInitialPoint().y > getFinalPoint().y) {
			pointx = getFinalPoint().x;
			pointy = getFinalPoint().y;
		} else if (getInitialPoint().x > getFinalPoint().x && getInitialPoint().y < getFinalPoint().y) {
			pointx = getFinalPoint().x;
			pointy = getInitialPoint().y;
		} else if (getInitialPoint().x < getFinalPoint().x && getInitialPoint().y > getFinalPoint().y) {
			pointy = getFinalPoint().y;
		}
	}
}

ESTA SEGUNDA PARTE PINTA, POR QUE MEU CIRCULO ESTA COM PROBLEMAS???..
Ele não está desenhando corretamente.

Elipse elipse = new Elipse(new Point(line.getPoint1().x, line.getPoint1().y), new Point(line.getPoint2().x, line.getPoint2().y), lineColor);
		elipse.draw();
		draws.push(elipse);
                for (Shape e : draws) {
		     g.setColor(((Elipse) e).getColor());
		     g.drawOval(((Elipse) e).getPointx(), ((Elipse) e).getPointy(), ((Elipse) e).getWidth(), ((Elipse) e).getWidth());
		}

3 Respostas

E

Que problema? Ficou oval em vez de circular? Se for isso, é um problema de coordenadas.

JoaoBluSCBR

Teu código não indica erro nenhum.

Apenas pode ter sido um erro ao entrar o valor inicial e final (serem diferentes)

ou

Se a distorsão for bem pequena:

Um problema de escala visual em seu equipamento.

Em alguns, quando trabalho meus mapas, sou obrigado a recuperar o retângulo de
tela, recuperar as propriedades de video (nr de pixels horizontais e verticais) e
criar uma escala horizontal e outra vertical, por onde passam os valores de
forma a corrigir a imagem visual. Infelizmente parece que em alguns equipamentos,
um pixel não é exatamente quadrático.

Marky.Vasconcelos

Mostra uma foto de como está.

Criado 13 de julho de 2011
Ultima resposta 13 de jul. de 2011
Respostas 3
Participantes 4