Outils du profs de maths

Règles du forum
ATTENTION ! Il est demandé de ne déposer dans ce forum que des exemples en langage Asymptote
  • finalisés
  • que l'on pense intéressants et optimisés
  • et qui se rapportent au thème du forum.
Si certains exemples déposés donnent lieu à de nombreuses modifications, ils seront déplacés et remplacés par un nouveau sujet dans ce forum avec la ou les meilleures propositions.
Pour les demandes d'aide ... il y a un forum spécifique !
Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Outils du profs de maths

Message non lu par GM » jeu. 11 mars 2010, 10:53

En attendant d'éventuelles figures d'une régle, d'un compas, ...

... voilà celle possible d'un rapporteur :

Figure asymptote 2a1ba4213805c55fcd66937909b45d4c
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. unitsize(.8cm);
  2. import geometry;
  3.  
  4. defaultpen(fontsize(8pt)); // Stylo par défaut
  5.  
  6. real r=5; // rayon du demi-cercle intérieur : r
  7. real l=2.5; // largeur du rapporteur : l
  8. real p=l/10; // largeur des petites graduations
  9. real g=2p; // largeur des grandes graduations
  10.  
  11. point pO=(0,0), pA=(r,0);
  12. line droiteregle=line(0,-l);
  13. circle cercleint=circle(pO,r),
  14. cercleext=circle(pO,r+l);
  15. point[] R=intersectionpoints(droiteregle,cercleext);
  16.  
  17. for(int a=0; a<=6; ++a) draw(pO--r*dir(a*30),gray);
  18. path chint=arc(cercleint,pA,-pA)--cycle,
  19. chext=arc(cercleext,R[1],R[0])--cycle;
  20. filldraw(chint^^chext,paleblue+white+evenodd,1bp+black);
  21. draw((r+l)*dir(45)--pO--(r+l)*dir(135),red);
  22.  
  23. for(int k=0; k<180; ++k)
  24. draw(r*dir(k)--(r+p)*dir(k)^^(r+l-p)*dir(k)--(r+l)*dir(k),.4bp+gray);
  25.  
  26. for(int k=0; k<=18; ++k) {
  27. draw(r*dir(10k)--(r+g)*dir(10k)^^(r+l-g)*dir(10k)--(r+l)*dir(10k),.6bp+blue);
  28. label(rotate(10k-90)*format("%i",10*k),(r+g)*dir(10k),dir(10k));
  29. label(rotate(90-10k)*format("%i",10*k),(r+l-g)*dir(180-10k),dir(-10k));
  30. }
  31. int xmax=floor(R[1].x);
  32. for(int x=0; x<10*xmax; ++x)
  33. draw((-x/10,-l)--(-x/10,p-l)^^(x/10,-l)--(x/10,p-l),.4bp+gray);
  34. for(int x=0; x<=xmax; ++x) {
  35. draw((-x,-l)--(-x,g-l)^^(x,-l)--(x,g-l),.6bp+blue);
  36. label(format("%i",x),(x,g-l),N);
  37. label(format("%i",-x),(-x,g-l),N);
  38. }
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

micercle
Messages : 7
Enregistré le : lun. 10 déc. 2012, 19:27

Re: Outils du profs de maths

Message non lu par micercle » dim. 24 mai 2015, 21:42

Dans les outils du prof de math, je propose les tables de sinus et cosinus "de poche" à la manière d'un abaque d'une époque antérieure à celle glorieuse des calculatrices et de la règle à calcul. J'ai trouvé ça dans le dernier numéro de la bibliothèque Tangente consacré aux angles.

J'envisage de le faire construire en vrai avec un système de loupes mobiles pour lire sur les arcs.

Voici le code, qui peut certainement être amélioré, ne pas se gêner :).

Micercle

Figure asymptote 7263b60b2eacd6b1710234395a477a62
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph;
  2. import math;
  3. usepackage("amsmath");
  4. size(15cm,15cm,Aspect);
  5.  
  6. pair O=(0,0), A, B, C, D;
  7. real R[], u = 1cm;
  8. path cercle[];
  9. int n= 100;
  10.  
  11. R[1] = 13u;
  12. R[2] = R[1]/2;
  13.  
  14. // Définition et tracé du cadre
  15. A = shift(R[1],0)*O;
  16. B = shift(0,R[1])*O;
  17.  
  18. void test(real theta)
  19. {
  20. real angle = radians(theta);
  21. pair P =R[1]*(cos(angle),sin(angle));
  22. // write(P);
  23. dot("P",P,red);
  24. draw(O--P,red);
  25. //
  26. pair Q = (0,ypart(P));
  27. draw(P--Q,red);
  28. dot("Q",Q,red);
  29. }
  30. path cadre(pair point, real R)
  31. {
  32. return arc(point,R,0,90)--point--shift(R,0)*point;
  33. }
  34.  
  35. draw(cadre(O,R[1]),linewidth(0.5bp));
  36.  
  37. path trait1,trait2,trait3;
  38.  
  39. real longueur = 1u;
  40. real longueur1 = 0.05*u;
  41. real longueur2 = 0.10*u;
  42. real longueur3 = 0.20*u;
  43. real longueur4 = 0.25*u;
  44. real longueur5 = 0.35*u;
  45. real longueur6 = 0.5*u;
  46.  
  47. // Tracé des graduations du cadre
  48. for (int i=0; i <=n; ++i)
  49. {
  50. if (i%5 != 0){
  51. longueur = longueur2;
  52. }else{
  53. longueur = longueur3;
  54. label(format("% 0.2f ",i/n), shift(-longueur,(i/n)*R[1])*O,+0.2W); //,+0.2W
  55. label(format("% 0.2f ",i/n), shift((i/n)*R[1],-longueur)*O,+0.4S);//,+0.4S
  56. }
  57. trait1 = O--shift(0,-longueur)*O;
  58.  
  59. // Graducations sur l'axe horizontal
  60. draw(shift((i/n)*R[1],0)*trait1,linewidth(0.5bp));
  61. // Graducations sur l'axe vertical
  62. draw(shift(0,(i/n)*R[1])*rotate(-90)*trait1,linewidth(0.5bp));
  63. }
  64.  
  65. // Tracé des degrés sur la cercle
  66. real i= 0;
  67. while (i <= 90)
  68. {
  69. if (2*i % 2 == 0){
  70. longueur = longueur2;}
  71. if (i % 5 == 0){
  72. if (i % 10 == 0){
  73. longueur = longueur4;
  74. }else{
  75. longueur = longueur3;
  76. }
  77. Label toto= format("%1f ",i);
  78. label(rotate(-90+i)*toto,rotate(i)*shift(R[1]+longueur5,0)*O, black);
  79. }
  80. if (2*i % 2 == 1){
  81. longueur = longueur1;
  82. }
  83. trait1 = shift(R[1],0)*(O--shift(longueur,0)*O);
  84. draw(rotate(i,O)*trait1);
  85. i = i + .5;
  86. }
  87. draw(arc(O,R[1]+longueur2,0,90),linewidth(0.5bp));
  88. draw(arc(O,R[1]+longueur6,0,90),linewidth(0.5bp));
  89.  
  90. // tracé des cercles de Cosinus et Sinus
  91. C = (R[1]/2,0);
  92. real epaisseur = 1*longueur/3;
  93.  
  94. // Cercle des Cosinus
  95. cercle[1] = arc(O,R[1]/2,0,180);
  96. cercle[2] = arc(O,R[1]/2-epaisseur,0,180);
  97. draw(shift(C)*cercle[1],linewidth(0.5bp));
  98. draw(shift(C)*cercle[2],linewidth(0.5bp));
  99.  
  100. // Cercle des Sinus
  101. D = rotate(90)*C;
  102. cercle[3] = shift(D)*rotate(-90)*cercle[1];
  103. cercle[4] = shift(D)*rotate(-90)*cercle[2];
  104. draw(cercle[3],linewidth(0.5bp));
  105. draw(cercle[4],linewidth(0.5bp));
  106.  
  107. // Graduation des arcs de Cosinus
  108. trait1 = shift(0,R[1]/2-epaisseur)*(C--shift(0,epaisseur)*C);
  109. trait2 = shift(0,R[1]/2-epaisseur/2)*(C--shift(0,epaisseur/2)*C);
  110.  
  111. Label toto;
  112.  
  113. void pointC(int i)
  114. {
  115. real abs = i/1000*R[1];
  116. real x = abs^2/R[1];
  117. real y = sqrt(R[2]^2-(x-xpart(C))^2);
  118. toto = format("%.2f",abs/R[1]);
  119. pair T = (x,y);
  120. if (i % 10 ==0){
  121. real delta;
  122. if (i <= 100){
  123. delta = 1-0.75*epaisseur/100;
  124. }else{
  125. delta = 1.0075;
  126. }
  127. draw(rotate(2*degrees(angle(T))-90)*scale(0.35)*toto,shift((T-C)*delta)*C);
  128. }
  129. path trait;
  130. trait1 = C--shift(0,-epaisseur)*C;
  131. trait2 = C--shift(0,-epaisseur/2)*C;
  132. if (i % 5 ==0){
  133. trait = trait1;
  134. }else{
  135. trait = trait2;
  136. }
  137. draw(rotate(2*degrees(angle(T))-90,T)*shift(T-C)*trait);
  138. }
  139.  
  140. void pointS(int i)
  141. {
  142. real abs = i/1000*R[1];
  143. real y = abs^2/R[1];
  144. real x = sqrt(R[2]^2-(y-ypart(D))^2);
  145. toto = format("%.2f",abs/R[1]);
  146.  
  147. pair T = (x,y);
  148. if (i % 10 ==0){
  149. real delta;
  150. if (i <= 100 ){
  151. delta = 1-0.75*epaisseur/100;
  152. }else{
  153. delta = 1.01;
  154. }
  155. if (i != 710){
  156. draw(rotate(2*degrees(angle(T))-90)*scale(0.35)*toto,shift((T-D)*delta)*D);
  157. }
  158. }
  159.  
  160. path trait;
  161. trait1 = D--shift(-epaisseur,0)*D;
  162. trait2 = D--shift(-epaisseur/2,0)*D;
  163. if (i % 5 ==0){
  164. trait = trait1;
  165. }else{
  166. trait = trait2;
  167. }
  168. draw(rotate(2*degrees(angle(T))-90,T)*shift(T-D)*trait);
  169. }
  170.  
  171. for (int i = 2; i <= 1000; i = i +2){
  172. pointC(i);
  173. pointS(i);
  174. }
  175.  
  176. // Schéma de principe
  177. pair M = R[1]*.76*(1,1);
  178. real r= 3.5u;
  179. dot("M",M,SW);
  180.  
  181. draw(cadre(M, r));
  182. real theta = 35;
  183. real angle = radians(theta);
  184. pair P =M + r*(cos(angle),sin(angle));
  185.  
  186. dot("$P$",P);
  187. draw(M--P);
  188. pair Q1 = (xpart(M),ypart(P));
  189. pair Q2 = (xpart(P),ypart(M));
  190. draw(Q1--P--Q2,dashed);
  191. dot("$\sin \alpha$",Q1,W);
  192. dot("$\cos \alpha$",Q2,S);
  193. draw(arc(shift(r/2,0)*M,r/2,0,180));
  194. draw(arc(shift(0,r/2)*M,r/2,-90,90));
  195. draw(arc(M,xpart(Q2)-xpart(M),0,theta));
  196. draw(arc(M,r/5,0,theta));
  197. label("$\alpha$", rotate(theta/2,M)*shift(r/5,0)*M,W);
  198. dot("$\cos \alpha$", rotate(theta,M)*Q2,N);
  199. draw(rotate(theta,M)*Q2--shift(r,0)*M);
  200.  
  201. dot("$\sin \alpha$", rotate(theta-90,M)*Q1,SE);
  202. draw(shift(0,r)*M--rotate(theta-90,M)*Q1);
  203. draw(arc(M,ypart(Q1)-ypart(M),theta,90));
  204.  
  205. draw(arc(M,xpart(Q2)-xpart(M),0,theta));
  206.  
  207. draw(arc(shift(0,r)*M,r/5,-90,-90+theta));
  208. label("$\alpha$", rotate(theta/2,shift(0,r)*M)*shift(0,4r/5)*M,N);
Micercle
-- -- -- -- --
FreeBSD-10.1-Asy 2.32-TeXLive-2014-Kate/TexMaker/TeXstudio

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Outils du profs de maths

Message non lu par GM » lun. 25 mai 2015, 06:15

micercle a écrit :Voici le code, qui peut certainement être amélioré, ne pas se gêner :).
Je me suis contenté d'indenter le code pour faciliter la lecture sur le forum.

Mais on voit, qu'il y aurait effectivement possibilité d'améliorer...puisque, j'ai réduit de moitié les valeurs passées à size (pour que l'image ne soit pas trop grande sur le forum) et cela induit un mauvais placement de certains labels et surtout un problème de taille des écritures.

L'idée me semble très intéressante,
la solution me semble (mais ce n'est qu'une impression, sans avoir analysé le code) fort longue.

Si je n'oublie pas, je reviendrai ultérieurement (pas avant juillet) sur cette figure, pour voir s'il est possible de réduire le code
et surtout, pour voir s'il est possible de gérer les étiquettes pour qu'elles ne soient plus sensibles au changement des valeurs passées à size (en faisant du "deferred drawing") : mon avis est que si on réduit les valeurs passées à size, il faut réduire le nombre d'étiquettes mais pas leur taille.

Si on devait réussir ultérieurement à améliorer le code... je signale, déjà, que la proposition initiale et ma réponse seront déplacées dans http://asy.gmaths.net/forum/demandes-d-aide-f15/, pour ne garder dans ce sujet qu'une version optimale.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Répondre