SIMULATION DE LA DIFFRACTION

cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008 - 28 avril 2004 à 16:19
titip03 Messages postés 5 Date d'inscription mercredi 31 décembre 2003 Statut Membre Dernière intervention 15 mars 2007 - 27 nov. 2004 à 19:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22316-simulation-de-la-diffraction

titip03 Messages postés 5 Date d'inscription mercredi 31 décembre 2003 Statut Membre Dernière intervention 15 mars 2007
27 nov. 2004 à 19:43
En fait, tu as raison, mais dans notre TP, on etait contraints d'utiliser uniquement le langage C et pas du tout C++.
Mais merci quand meme pour ton commentaire, j'essaierai de faire ca parce que c'est vrai que c'est tres lent...

Bonne journee,

Titip
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
28 avril 2004 à 16:22
me suis trompé, ds l'appel à cos() j'ai mis des degrés, il faut des radians, mais ça avec une fonction inline tu t'en sors vite fait.

aussi, ton define de PI est pas entièrement utile. la précision des float est limitée à 6 décimales (et encore!), donc tes 30 décimales servent pas à grand chose ;-)

vala
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
28 avril 2004 à 16:19
Pour les fonctions trigonométriques, ce qu'on fait souvent c'est d'au lancement du programme sauver autant de valeur que l'on veut (en fct de la précision désirée) ds des tableaux, et puis tu vas chercher tes valeurs là dedans, parce que là c bcp trop lent, j'ai essayé avec 10 cercles, 20 minutes O_o (enfin, quasiment, 1099 s)

Si tu veux une précision à un centième de degré près (tu travailles en degré ou en radians? enfin, vais le faire en degrés)

tu fais ça

float *tCosinus = new float[360 * 100];
for(int i=0; i < 360 * 100; i++)
tCosinus[i] = cos((float)i/100.0);

et pour récupérer les valeurs bien entendu comme ceci:
val = tCosinus[angle * 100.0];

ça met un peu de temps au démarrage mais c'est (probablement) un bon gain à l'utilisation. si tu testes, tu me diras quoi?

Bonne journée,

Kirua
Rejoignez-nous