Elipse

2 respostas
F

Olá pessoal do Portal Java! Estou com um problema e se alguém souber a resposta vai me ajudar muito. É o seguinte: um trabalho de Computação Gráfica da Faculdade pede p/ desenhar na tela um círculo, uma reta e uma elipse usando um applet. Os dois primeiros eu consegui fazer, mas a elipse está sendo um problema. Não posso usar os métodos Java p/ desenhar (apenas o fillOval), pois tem que ser plotando pixel a pixel. Se alguém tiver a fórmula da elipse e puder me mandar vai quebrar um galhão!

[ ]'s
Fred

:hihi:

2 Respostas

H
import java.awt.image.BufferedImage;

public class Elipse {
	private int x0,y0,a,b;	
		
	public Elipse(int x0, int y0, int a, int b){
		this.a  = a;
		this.b  = b;
		this.x0 = x0;
		this.y0 = y0;
	}
	
	public void desenhar(int cor, BufferedImage img){
		int a2 = a * a;         int b2 = b * b;
		int twoa2 = 2 * a2;     int twob2 = 2 * b2;
		int x = 0;              int y = b;
		int px = 0;             int py = twoa2 * y;
		double p;
		int cont = 0;

		desenha_pontos (x0, y0, x, y, cor,img);

		p = (int)(b2 - (a2 * b) + (0.25 * a2) + 0.5);
		while (px < py) {
		   x++;
		   px += twob2;
		   if (p < 0){ 
			 p += b2 + px;
		   }
		   else {
			  y--;
			  py -= twoa2;
			  p += b2 + px - py;
		   }
		   desenha_pontos (x0, y0, x, y, cor,img);
		}

		p = (int)(b2 * (x+0.5)*(x+0.5) + a2 * (y-1)*(y-1) - a2 * b2 +0.5);
		while (y > 0) {
		   y--;
		   py -= twoa2;
		   if (p > 0) p += a2 - py;
		   else {
			  x++;
			  px += twob2;
			  p += a2 - py + px;
		   }
		
		   desenha_pontos (x0, y0, x, y, cor,img);
		 }
	}
	

	private void desenha_pontos(int x0, int y0, int x, int y, int value,BufferedImage img)
	{
			img.setRGB (x0+x,y0+y, value);			
		if (x0 >= x){
			img.setRGB (x0-x,y0+y, value);
		}
		if (y0 >= y){
			img.setRGB (x0+x, y0-y, value);
		}
		if ((x0 >= x) && (y0 >= y)){
			img.setRGB (x0-x, y0-y, value);
		}
	}	
	
}

Não sei se vc está trabalhando com BufferedImage, eu usei esta classe para fazer o meu trabalho de CG de primitivas 2D.
Espero q tenha ajudado :) Se tiver alguma dúvida no código me pergunte!

F

Valeu mesmo brother! As únicas dúvidas que fiquei foram como usar a classe através de um Applet, devo usar o método paint ou não? E como funciona o Buffered Image?

[ ]'s
Fred

Criado 26 de setembro de 2004
Ultima resposta 26 de set. de 2004
Respostas 2
Participantes 2