Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme dans mon programme fractale [ Archives / Au secours ] (Jarod1980)

mercredi 3 août 2005 à 17:43:44 | Probleme dans mon programme fractale

Jarod1980

Bonjour tout le monde,

J'aurais besoin d'aide pour résoudre un petit problème. J'ai adapté un programme que j'ai fais en C (fractale de Julia) en Java. Le problème c'est que mon programme en java n'affiche rien, enfin juste un carré noir. Je voudrais savoir si quelqu'un peut m'aider à résoudre ce problème svp. En vous remerciant d'avance.
Voici ma source:

import java.applet.Applet;
import java.awt.*;

public class MandelbrotApp extends Applet {

 public void paint(Graphics g)
 {
 int winx=250;
 int winy=250;
 double xbegin = -1.5;
 double xend=1.5;
 double ybegin = -1.5;
 double yend=1.5;
 
for(float i=0;i<winx;i+=0.999){
    for(float j=0;j<winy;j+=0.999){

      // define z_0
      double zIm = j*(yend-ybegin)/(winy*1.0)+ybegin;
      double zRe = i*(xend-xbegin)/(winx*1.0)+xbegin;
   double cIm = -0.1;
      double cRe = -0.745;
int res = 0;
      double Re2Z;
      double Im2Z;
     
   Re2Z = zRe * zRe;
      Im2Z = zIm * zIm;
  
   while(res<255 && (zIm*zIm + zRe*zRe)<=4.0 ){
   Re2Z = zRe * zRe;
            Im2Z = zIm * zIm;
            zIm = 2 * zRe * zIm + cIm;
            zRe = (Re2Z - Im2Z) + cRe;

 res++;
      }
g.setColor(new Color((float)(Math.cos(res / 10.) + 0.03), (float)(Math.tan (zRe / 10.)), (float)(Math.sin (res / 10.) + .3)));

g.drawLine((int)(i), (int)(j),(int)(i),(int)(j));
   }
   }
}
public String getAppletInfo()
 {
  return "Cet applet montre la fractale de Julia";
 }

}

Jarod_Delaware


mercredi 3 août 2005 à 18:33:29 | Re : Probleme dans mon programme fractale

Dobel

Il y a un problème dans ton calcul de couleur (et c'est pas trop étonnant vu les fonctions que tu as écrit )

avec un truc plus simple genre :
        g.setColor(new Color( (float) Math.abs(Math.cos(res / 10.)),
                             (float) Math.abs(Math.tan(zRe / 10.)),
                             (float) Math.abs(Math.sin(res / 10.))));

ça fonctionne mieux , mais ce n'est sans doute pas ce que tu veux car ça ne rend pas très très bien...

tu peux peut-être adopter un truc de la forme :
g.setColor(new Color( (float) Math.abs(Math.sin(2*Math.PI*res / 255. + phi1)),
                             (float) Math.abs(Math.sin(2*Math.PI*res / 255. + phi2)),
                             (float) Math.abs(Math.sin(2*Math.PI*res / 255. + phi3)))); //255 car dans ton truc, l'algo s'arrête pour res = 255

où phi1, phi2 et phi3 sont 3 déphasages que tu adaptes suivant la "couleur de fond" souhaitée.


j'avais déjà fait un algo du genre qui pouvait donner des trucs sympas ;)
je peux essayer de le retrouver et te le copier si ça t'intéresses.

Dobel
[Une fois rien, c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter quelque chose, et pour pas cher]

mercredi 3 août 2005 à 18:45:41 | Re : Probleme dans mon programme fractale

Jarod1980

Salut Dobel,
Je te remercie beaucoup pour ta réponse. Je vais essayé de faire comme tu m'as dis. Si tu retrouves ton algo ça m'interesse egalement.
Merci encore.

Jarod_Delaware

mercredi 3 août 2005 à 19:34:23 | Re : Probleme dans mon programme fractale

Dobel

Réponse acceptée !
Bon, j'ai retrouvé, mais c'est du C prévu pour passer par JNI. J'avais mis toutes les méthodes de calcul dans une DLL séparée.


//*env, jclass : ici, on s'en fout ;)
//n : tableau qui contient toutes les valeurs de sorties (tous les "res" dans ton algo)
//l : la longueur de n

//ite : le nombre max d'itérations (255 dans ton algo)
//r, g et b (entre 0 et 255) : couleur du "fond", c.a.d la couleur quand res=0


JNIEXPORT jintArray JNICALL Java_jfractal_Algorithme_palette (JNIEnv *env, jclass, jintArray n, jint l, jint ite, jint r, jint g, jint b) {
    jintArray sortie = env->NewIntArray(l*3);//création du tableau qui va contenir les couleurs
    jint tmp,rs,gs,bs;     //rs, gs, bs : composantes rouge vert bleu en sortie
    jdouble phi1,phi2,phi3;
    const jdouble Pi=3.141592653589793;

    phi1=asin(r/255.);         //Arcsinus pour transformer la couleur en "déphasage"
    phi2=asin(g/255.);
    phi3=asin(b/255.);



    for (jint i=0; i<l; i++) {//pour chaque point du fractal
        env->GetIntArrayRegion(n,i,1,&tmp);// on charge la valeur de sortie de tmp (tmp = res de ton algo)
//c'est à partir de là que ça nous intéresse ;)
//tmp1, tmp2, tmp3
        if (tmp==ite) {//quand res = resMax,
            rs=0;
//la couleur de sortie est noire, c'est juste pour l'esthétique :D
            gs=0;
            bs=0;
        }
        else {
//sinon... ce que je disais dans le message précédent :)
            rs=abs(255*sin((2*Pi*tmp+phi1*ite)/ite));
            gs=abs(255*sin((2*Pi*tmp+phi2*ite)/ite));
            bs=abs(255*sin((2*Pi*tmp+phi3*ite)/ite));
        }

        env->SetIntArrayRegion(sortie,i*3,1,&rs);//on place dans sortie les valeurs calculées
        env->SetIntArrayRegion(sortie,i*3+1,1,&gs);
        env->SetIntArrayRegion(sortie,i*3+2,1,&bs);
    }
    return sortie;
}


voilà
A+

Dobel
[Une fois rien, c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter quelque chose, et pour pas cher]

mercredi 3 août 2005 à 19:56:32 | Re : Probleme dans mon programme fractale

Jarod1980

Super !
Merci beaucoup Dobel pour ton aide et pour l'algo. Je vais  de travailler dessus. Je vais egalement essayé de mettre un zoom dans mon programme. Mais bon, pour le moment je ne sais pas comment on fait en Java. Si tu as une idée sur la question ou si tu connais des tutorials dessus je suis preneur.
Merci encore pour ton aide.

Jarod_Delaware

jeudi 4 août 2005 à 16:28:50 | Re : Probleme dans mon programme fractale

Dobel

Je ne connais aucun algo pour les zooms, mais ça doit bien exister puisqu'il existe des programmes capables de faire des zoom en temps réel (xaos par exemple [ Lien ]).

Dans mon programme, je me contentais de redéfinir les bornes de l'image et la précision du calcul, et recalculer une image.

Dobel
[Une fois rien, c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter quelque chose, et pour pas cher]

jeudi 4 août 2005 à 16:43:43 | Re : Probleme dans mon programme fractale

Jarod1980

Salut Dobel,
J'ai regardé un peu sur le net pour voir comment ils font des zooms de selection  rectangulaire mais j'ai pas tout compris. Pour le zoom j'etais arriver à en faire un mais c'etait en C et avec Glut. Ca m'a l'air d'être plus compliqué en Java. J'ai posté un message dans le forum de javafr pour avoir une aide pour le zoom. Mais pour le moment toujours pas de réponses.
Encore merci pour ton aide et ton algo Dobel.

Jarod_Delaware



Cette discussion est classé dans : int, double, float, zre, zim


Répondre à ce message

Sujets en rapport avec ce message

Aide pour faire un zoom [ par Jarod1980 ] Bonjour tout le monde,J'aurais besoin d'aide pour faire un zoom par exemple un zoom de selection rectangulaire qui agrandit la zone voulue sur un prog transformer une variable de type float en une variable de type double [ par yosraj ] salut tous le monde,en fait je voudrais transformer une variable de type float en une variable de type Double.j'ai voulu utilisé la méthode parseDoubl tableau maxi 40 elements ! [ par gabule ] Bonjour tout le monde.Voila j'ai un probleme.Mon script sert a recupere dans un fichier txt des coordonnées de points(2 colonnes : x et y) et en faire calcul de matrice [ par camy12 ] bonjour tout le monde!!je suis débutante en Java et avec eclipse aussi, j'afficher les elements d'une matrice et je veux calculer le maximum de chacun division d'une matrice sur un vecteur avec java [ par camy12 ] bonjour tout le monde.j'ai un problème avec mon programme, il me signale pas d'érreurs dans mon code mais il me génère un erreurs de compilation. je p point sur polyligne [ par umafaid ] Bonjour,je réponds à ce forum parce que j'ai un problème assez similaire à ce que gracerare veut faire sauf que comme le recommande bouye, je n'utilis Probleme avec "possible loss of precision" [ par mleloc ] Bonjour a tous, j'ai un petit probleme avec ce morceau de code:class ZoneDessin extends Canvas{    float charge1;    float abscisse;    Point p;       faute inaperçue [ par TSI3ISSAT ] ce programme n'affiche que 1pour quoi? int fact(int n){  int i,P=1;  for(i=n;i>0;i--)  P=P*i;  return P;  }  double pow(double x, int n)   { int i;    int ou float ?? [ par amine1234Z ] Salut j'ai fait comme ca:int t1=0,i1=0,P1=0;-------------------------------------------------------------------------i1 = Integer.parseInt(MonText. partie entière double -> int [ par jmg02001 ] bonjour, sauriez vous comment récupérer la partie entière d'un double dans un int?voici mes tentatives échouées: double latitude = 1.0;int degre_latit


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.