Calcul hyperfocale en liste
Posté le 03/05/2015 18:36
Salut, je suis en train (d'essayer) de faire sur ma Graph 75 un programme permettant de calculer l'hyperfocale par rapport à l'ouverture choisie par l'utilisateur, et d'afficher les hyperfocales sur l'étendue de focales choisie par l'utilisateur. Au fait, l'hyperfocale est la distance sur laquelle on doit faire la mise au point (je parle de photographie) afin d'avoir toute l'image nette à partir de la moitié de la distance hyperfocale. Celle-ci dépend de la taille du capteur, de l'ouverture et de la focale. Je vous invite à rechercher ce que c'est, si vous êtes curieux, bien évidemment
J'ai joint une capture d'écran de mon téléphone sur lequel j'ai recopié le code.
Le calcul qu'il faut connaître pour l'hyperfocale est le suivant :
Hyperfocale = focale * focale / (1000*0.02*ouverture)
Dans mon code, j'ai appelé l'ouverture D et la focale F.
Si quelqu'un pouvait m'aider à afficher en face des résultats les focales auxquels ceux-ci correspondent, je serais ravi
Merci d'avance pour votre aide, et d'avoir lu mon pavé
PS : La pièce jointe ne fonctionne pas, donc voilà le code :
0→A~Z
"HYPERFOCALE : QUELLE ETENDUE "?→E
"A "?→G
"OUVERTURE "?→D
For E→F To G
F*F/(1000*0.02*D)◢
Next
Citer : Posté le 03/05/2015 18:53 | #
Ce que tu peux faire c'est utilise Locate, qui écrit n'importe où dans l'écran :
Locate [i]x[/i],[i]y[/i],[i]variable[/i]
Par contre tu ne peux pas utiliser le Disp (◢) parce que comme Locate ne fait pas descendre le curseur de ligne, le "-Disp-" écrase le Locate (à moins que ce dernier n'ait pas été fait en ligne 1, mais je pense que c'est mieux).
Du coup, pour le remplacer, tu peux utiliser une astuce utilisant Getkey pour attendre que l'utilisateur relâche toutes les touches puis appuie sur EXE :
While Getkey-31:WhileEnd
Locate : [SHIFT][VARS](PRGM)[F6][F4](I/O)[F1](Locate)
Getket : [SHIFT][VARS](PRGM)[F6][F4](I/O)[F2](Getkey)
Citer : Posté le 03/05/2015 19:08 | #
J'avais oublié de préciser que j'avais essayé avec les locate, mais je n'ai pas réussi à mettre les locate et les résultats en même temps
Je ne comprends pas ton système de touches, parce que, en quelle manière cela affichera-t-il les focales correspondantes ?
En fait, j'aimerais que ce soit exactement la même chose que le programme "Table" de la calculatrice (celui pour les fonctions). Il est, je trouve, le meilleur exemple, parce que c'est un tableau, et si je veux une focale pas présente dans celui-ci, il me suffit de l'entrer et d'appuyer sur exe.
Merci pour ta réponse si rapide
Ordi fonctionne sous Ubuntu
Citer : Posté le 03/05/2015 20:00 | #
À ce moment là tu peux utiliser les matrices
"HYPERFOCALE : QUELLE ETENDUE "?→E
"A "?→G
"OUVERTURE "?→D
{G-E, 2}→Mat A // On créé une matrice de G-E+1 lignes, 2 colonnes
For E→F To G
F→Mat A[E-F+1] // On rentre la focale dans la première colonne
F*F/(1000*0.02*D)→Mat A[E-F+1, 2] // Et dans la seconde l'hyperfocale associée
Next
Mat A◢ // On affiche la matrice
Ajouté le 03/05/2015 à 20:01 :
Ensuite tu n'as plus qu'à parcourir la matrice avec les touches fléchées et appuyer sur EXE pour quitter le programme
Citer : Posté le 03/05/2015 20:18 | #
En fait, j'aimerais que ce soit exactement la même chose que le programme "Table" de la calculatrice (celui pour les fonctions). Il est, je trouve, le meilleur exemple, parce que c'est un tableau, et si je veux une focale pas présente dans celui-ci, il me suffit de l'entrer et d'appuyer sur exe.
Du coup, la solution de Dark Storm est de loin la plus appropriée. Je vais quand même répondre à titre de complétude.
J'avais oublié de préciser que j'avais essayé avec les locate, mais je n'ai pas réussi à mettre les locate et les résultats en même temps
C'est un peu délicat car en règle générale, tout ce qui est affiché directement (entends par là en utilisant les guillemets classiques) efface toute la ligne et déplace le curseur virtuel vers la ligne suivante. Lorsque le curseur virtuel atteint le bas de l'écran, les sept lignes de texte sont remontées pour libérer de la place.
En Locate, c'est différent : afficher du texte ne déplace pas le curseur. Donc imaginons que tu affiches du texte en 1,1 après un ClrText (qui ramène le curseur virtuel sur la première ligne), si tu utilises un Disp, il va écraser toute la ligne sur laquelle se trouve le curseur (à savoir la première ligne) et donc le Locate avec !
Une solution est d'écrire sur une autre ligne, mais c'est un peu contraignant.
Tu aurais pu n'utiliser que des Locate, car on peut spécifier en troisième argument du texte ou une variable, indifféremment.
Je ne comprends pas ton système de touches, parce que, en quelle manière cela affichera-t-il les focales correspondantes ?
La partie qui affiche le texte repose sur le Locate, le système de touches que j'ai proposé permet de réaliser le même effet de pause que le Disp sans afficher de message à l'écran.
La fonction Getkey renvoie 0 si aucune touche n'est pressé ou l'id de la première touche détectée sinon. En l'occurrence, l'id de la touche [EXE] est 31.
Donc la boucle suivante :
va tourner tant que la condition Getkey est validée, ce qui signifie implicitement Getkey≠0. À savoir qu'elle permet de mettre le programme en pause jusqu'à ce que l'utilisateur relâche toutes les touches.
Ensuite :
revient à dire Getkey≠31 puisque la condition implicite est Getkey-31≠0.
Donc cette double attend que l'utilisateur appuie sur [EXE].
Les deux boucles sont nécessaires, sinon l'utilisateur pourrait garder [EXE] pressé et enchaîner les étapes sans rien voir.
Ceci dit, si tu veux un tableau, il faut utiliser les matrices
Citer : Posté le 03/05/2015 21:35 | #
Le - Disp- affiché à l'écran efface souvent les lignes de locate. Il faut insérer un "" avant la ligne qui comporte le locate
.
Citer : Posté le 03/05/2015 22:48 | #
Je vous remercie beaucoup de votre aide, et de vos superbes explications (vraiment).
Ton histoire de getkey, Lephenixnoir, ne m'est pas facile à comprendre, mais je me vais renseigner de ce pas
Et, Darkstorm, lorsque je lance le programme que tu m'as si gentiment préparé, la calculatrice annonce une erreur de syntaxe, en plaçant le curseur derrière le A du premier Mat A du programme
Ordi fonctionne sous Ubuntu
Citer : Posté le 03/05/2015 22:56 | #
Oups, au temps pour moi, il faut faire « {..}->Dim Mat A
Avec Dim : http://www.planet-casio.com/Fr/reference_basic_casio/commande_basic.php?fonc=68
Citer : Posté le 03/05/2015 23:01 | #
Ah ! Merci bien
Je vais voir si cela fonctionne
{G-E, 2}→Mat A // On créé une matrice de G-E+1 lignes, 2 colonnes
Dans le commentaire, tu parles d'une matrice de G-E+1 lignes, 2 colonnes, cependant il n'y a pas de +1 dans le code. Est-ce normal ?
Ordi fonctionne sous Ubuntu
Citer : Posté le 03/05/2015 23:20 | #
Non, en effet aussi, j'ai rajouté le +1 car les matrices commencent à 1. Tu peux le rajouter dans le code.
Citer : Posté le 03/05/2015 23:56 | #
Maintenant, avec cette ligne ressemblant à ceci, il y a une erreur syntaxique entre le 1 et le ] :
F→MatA[E-F+1] (au fait, le -, c'est sur la calto le signe de soustraction, n'est-ce pas ?
Ordi fonctionne sous Ubuntu
Citer : Posté le 04/05/2015 00:35 | #
Oui. Il manque ça : [G-E+1,1] pour indiquer que c'est la première colonne.
Désolé pour toutes ces fautes, j'ai fait ce code assez rapidement
Citer : Posté le 04/05/2015 10:08 | #
Ça ne fonctionne toujours pas
Avec ce code :
0→A~Z
"HYPERFOCALE : QUELLE ÉTENDUE "?→E
"A "?→G
"OUVERTURE "?→D
{G-E,2}→Dim Mat A
For E→F To G
F→Mat A[G-E+1,1] // Avant, c'était E-F+1, ce changement des lettres est-il normal ?
F*F/(1000*0.02*D)→Mat A[E-F+1,2]
Next
Mat A◢
Ordi fonctionne sous Ubuntu