Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 2015
-
3 août 2005 à 17:43
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 2015
-
4 août 2005 à 16:43
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;
cs_Dobel
Messages postés333Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention23 novembre 20091 3 août 2005 à 19:34
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]
(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]
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 3 août 2005 à 18:45
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.
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 3 août 2005 à 19:56
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Dobel
Messages postés333Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention23 novembre 20091 4 août 2005 à 16:28
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 http://xaos.sourceforge.net/english.php).
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]
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 4 août 2005 à 16:43
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.