Ir ao conteúdo

Java Curva de Koch e Preenchimento


Ir à solução Resolvido por Lucas LC,

Posts recomendados

  • Solução
Postado

Alguém poderia dar uma ajuda ou algumas dicas.

 

Preciso implementar um código que imprima uma curva de koch, como essa:

 

image.png.fbacf0c216f2b63edf0ed4dca0b31422.png

 

Fiz uma classe mãe que se chama Image, segue o código:    

import java.awt.*;
    import java.awt.image.*;
    import javax.imageio.*;
    import java.io.*;

    public class Image {

        private int width, height;
        private BufferedImage image;
        private Graphics graphics;

        private Color color;
        private Color bgColor;

        public Image(int w, int h, int r, int g, int b){

            setup(w, h, r, g, b);
        }

        public Image(int w, int h){

            setup(w, h, 0, 0, 0);
        }

        private void setup(int w, int h, int r, int g, int b){

            image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
            width = image.getWidth();
            height = image.getHeight();
            graphics = image.createGraphics();
            
            setBgColor(new Color(limit(r), limit(g), limit(b)));
            setColor(Color.WHITE);
            clear();
        }

        private int limit(int value){

            return value < 0 ? 0 : (value > 255 ? 255 : value);
        }

        public void setBgColor(Color c){

            bgColor = c;
        }

        public void setBgColor(int r, int g, int b){

            setBgColor(new Color(limit(r), limit(g), limit(b)));
        }

        public void setColor(Color c){

            color = c;
        }

        public void setColor(int r, int g, int b){

            setColor(new Color(limit(r), limit(g), limit(b)));
        }

        public void clear(){

            graphics.setColor(bgColor);
            graphics.fillRect(0, 0, width, height);
        }

        public void setPixel(int x, int y){
                
            if(x >= 0 && y >= 0 && x < width && y < height){
                
                image.setRGB(x, y, color.getRGB());
            }
        }

        public int getPixel(int x, int y){

            return image.getRGB(x, y); 
        }

        public void drawLine(int x1, int y1, int x2, int y2){

            graphics.setColor(color);
            graphics.drawLine(x1, y1, x2, y2);
        }

        public void save(String fileName){

            try{

                ImageIO.write(image, "png", new File(fileName));
            }
            catch(IOException e){
        
                System.out.println("Unable to save image...");
                e.printStackTrace();
            }
        }
    }

Tenho outra classe que converte o arquivo txt em imagem e ela imprime uma paisagem sem nada, da uma olhada: 

 

image.png.4a342a3bd2b0489c56270e9963ddea8f.png

 

Agora preciso implementar uma classe filha da curva de koch, porém não sei bem como fazer isso. Sendo que a implementação tem que  receber como parâmetros as coordenadas x e y dos pontos P e Q e o valor l do limiar.

Postado
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;

public class Koch extends Image {

//declaracoes de tipo
 int largura, altura;
 double PA,AB,BC,CQ;
 double cos60,sen60;

public void inicio() { 
//Coordenadas iniciais 
PA = 40;
AB = largura - 40;
BC = altura - 80;
CQ = BC;
cos60 = Math.cos(3.1415927/3.);
sen60 = Math.sin(3.1415927/3.);
}

public void Koch(Graphics imagem,int l,double Px,double Py,double Qx,double Qy){
int c; 
//Caso o limite seja menor que o comprimento. 
if ( l < c ) imagem.drawLine( (int)Px, (int)Py, (int)Qx, (int)Qy );
 else{
         l = l - 1;
         double Ax = Px + (Qx-Px)/3.;//Ponto A, sendo 1/3. 
         double Ay = Py + (Qy-Py)/3.;
         double Cx = Qx - (Qx-Px)/3.;//Ponto C, sendo 2/3.
         double Cy = Qy - (Qy-Py)/3.;
         double Bx = Ax + cos60*(Cx-Ax) + sen60*(Cy-Ay);// +: vira o desenho 60 graus no sentido horário.
         double By = Ay - sen60*(Cx-Ax) + cos60*(Cy-Ay); //-: vira o desenho 60 graus no sentido anti-horário.
         
         Koch(imagem, l, Px, Py, Ax, Ay );
         Koch(imagem, l, Ax, Ay, Bx, By );
         Koch(imagem, l, Bx, By, Cx, Cy );
         Koch(imagem, l, Cx, Cy, Qx, Qy );
      }
   }
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...