|
Trouver une ressource
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)
Informations & options pour cette discussion
|
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|