Julia Définit le rendu sur JPanel en Java-colore un seul Pixel


Je cherche à écrire un programme qui rend l'ensemble de Mandelbrot, puis un Ensemble de Julia pour un nombre complexe dans un autre panneau, lorsque l'utilisateur clique sur un point de l'ensemble de Mandelbrot panneau.

Cependant, le code de rendu de mon jeu de Julia pour une raison quelconque ne fonctionne pas. Il semble ne colorer que le pixel le plus à gauche en haut, et je ne peux pas comprendre pourquoi cela me pourrait. Je ne sais pas si les mathématiques sont fausses dans la méthode de rendu, ou si la coloration est le problème. Des pointeurs ou une solution ce serait fantastique - je me suis gratté la tête pendant un certain temps.

Si quelqu'un trouverait cela plus facile à résoudre en ayant tout le code, faites - le moi savoir-merci.

Voici le code pour le panneau Set de Julia, tout le reste a été omis.

  class juliaPanel extends JPanel {

        ComplexNumber fixedNumber = new ComplexNumber(0,0);
        double newReal, newImaginary, oldReal, oldImaginary;

        public void setFixedNumber(ComplexNumber fixedNumberIn) {
            fixedNumber = fixedNumberIn;
        }

        public void paintComponent(Graphics g){
            super.paintComponent(g);
            newReal = 0;
            newImaginary = 0;
            int i;
            for(int y = 0; y < height; y++) {
                for(int x = 0; x < width; x++) {
                    for (i=0; i< iterationsToDo; i++) {
                        oldReal = newReal;
                        oldImaginary = newImaginary;
                        newReal = oldReal * oldReal - oldImaginary * oldImaginary + fixedNumber.getReal();
                        newImaginary = 2 * oldReal * oldImaginary + fixedNumber.getImaginary();
                        if((newReal * newReal + newImaginary * newImaginary) > 4) break;
                    }
                    if(i == 255){
                        g.setColor(Color.BLACK);
                    }else{
                         g.setColor(Color.getHSBColor(i/100.0F,1F,1F));
                    }
                    g.fillRect(x, y, 1, 1);
                }
            }   
        }
Author: mKorbel, 2016-03-07

1 answers

Avant de démarrer la boucle interne sur i, c'est-à-dire après que x et y ont changé pour le pixel suivant, vous devez définir le nombre complexe initial en fonction de ce pixel, quelque chose comme

newReal = minReal + x*deltaReal;
newImag = maxImag - y*deltaImag;

, la min et max sont -2.0 et 2.0 et le delta sont 4.0/width et 4.0/height, ou le minimum de fois pour obtenir 1:1 ratio d'aspect.

 0
Author: LutzL, 2016-03-07 20:06:23