source: pyromaths/trunk/fuentes/src/pyromaths/ex/sixiemes/espace.py @ 423

Last change on this file since 423 was 423, checked in by mabarracus, 4 years ago

add sources from pyromaths 15.10

File size: 11.5 KB
Line 
1
2# Pyromaths
3# -*- coding: utf-8 -*-
4#
5# Pyromaths
6# Un programme en Python qui permet de créer des fiches d'exercices types de
7# mathématiques niveau collège ainsi que leur corrigé en LaTeX.
8# Copyright (C) 2006 -- Jérôme Ortais (jerome.ortais@pyromaths.org)
9#
10# This program is free software; you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation; either version 2 of the License, or
13# (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License
21# along with this program; if notPopen, write to the Free Software
22# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23
24import random
25# from pyromaths.outils.Affichage import decimaux
26
27def noms_sommets(nb):
28    """Renvoie nb noms de sommets"""
29
30    (listenb, listepts) = ([], [])
31    for i in range(26):
32        listenb.append(i + 65)
33    for i in range(nb):
34        listepts.append(str(chr(listenb.pop(random.randrange(26 - i)))))
35    listepts.sort()
36    return listepts
37
38def connect(pt, F1, F2):
39    """renvoie les sommets connectes à pt"""
40    if pt in F1:
41        result = [F1[F1.index(pt) - 1], F1[(F1.index(pt) + 1) % len(F1)], F2[F1.index(pt)]]
42    else:
43        result = [F2[F2.index(pt) - 1], F2[(F2.index(pt) + 1) % len(F2)], F1[F2.index(pt)]]
44    return result
45
46
47def reponse1(pt, F1, F2):
48    """renvoie la réponse à la première question"""
49    conn = connect(pt, F1, F2)
50    ptc1 = conn[random.randrange(0, len(conn))]
51    conn.remove(ptc1)
52    ptc2 = conn[random.randrange(0, len(conn))]
53    conn.remove(ptc2)
54    ptc3 = conn[0]
55    F3 = [F2[0], F1[0], F1[3], F2[3]]
56    F4 = [F2[0], F2[1], F1[1], F1[0]]
57    F5 = [F1[1], F2[1], F2[2], F1[2]]
58    F6 = [F1[2], F2[2], F2[3], F1[3]]
59    F2b = F2[:]
60    F2b.reverse()
61    if (pt in F1) and (ptc1 in F1) and (ptc2 in F1):
62        i = F1.index(pt)
63        j = F2.index(ptc3)
64        res = [pt, F1[(i + 1) % 4], F1[(i + 2) % 4], F1[(i + 3) % 4], ptc3, F2[(j + 1) % 4], F2[(j + 2) % 4], F2[(j + 3) % 4]]
65    elif (pt in F2) and (ptc1 in F2) and (ptc2 in F2):
66        i = F2b.index(pt)
67        j = F1.index(ptc3)
68        res = [pt, F2b[(i + 1) % 4], F2b[(i + 2) % 4], F2b[(i + 3) % 4], ptc3, F1[(j - 1) % 4], F1[(j - 2) % 4], F1[(j - 3) % 4]]
69    elif (pt in F3) and (ptc1 in F3) and (ptc2 in F3):
70        i = F3.index(pt)
71        j = F5.index(ptc3)
72        res = [pt, F3[(i + 1) % 4], F3[(i + 2) % 4], F3[(i + 3) % 4], ptc3, F5[(j - 1) % 4], F5[(j - 2) % 4], F5[(j - 3) % 4]]
73    elif (pt in F4) and (ptc1 in F4) and (ptc2 in F4):
74        i = F4.index(pt)
75        j = F6.index(ptc3)
76        res = [pt, F4[(i + 1) % 4], F4[(i + 2) % 4], F4[(i + 3) % 4], ptc3, F6[(j - 1) % 4], F6[(j - 2) % 4], F6[(j - 3) % 4]]
77    elif (pt in F5) and (ptc1 in F5) and (ptc2 in F5):
78        i = F5.index(pt)
79        j = F3.index(ptc3)
80        res = [pt, F5[(i + 1) % 4], F5[(i + 2) % 4], F5[(i + 3) % 4], ptc3, F3[(j - 1) % 4], F3[(j - 2) % 4], F3[(j - 3) % 4]]
81    elif (pt in F6) and (ptc1 in F6) and (ptc2 in F6):
82        i = F6.index(pt)
83        j = F4.index(ptc3)
84        res = [pt, F6[(i + 1) % 4], F6[(i + 2) % 4], F6[(i + 3) % 4], ptc3, F5[(j - 1) % 4], F5[(j - 2) % 4], F5[(j - 3) % 4]]
85    return res
86
87
88
89
90def reponse2(pt1, ptc1, F1, F2):
91    """renvoie la réponse à la deuxième question et le segment[p1ptc1]"""
92    rep = []
93    connects = connect(pt1, F1, F2)
94    for pt in connects:
95        if pt <> ptc1:
96            rep.append('[' + pt1 + pt + ']')
97    connects2 = connect(ptc1, F1, F2)
98    for pt in connects2:
99        if pt <> pt1:
100            rep.append('[' + ptc1 + pt + ']')
101    rep.append('[' + pt1 + ptc1 + ']')
102    return tuple(rep)
103def reponse3(pt2, ptc2, F1, F2):
104    """renvoie la réponse à la troisièmequestion et le segment[pt2ptc2]"""
105    if (pt2 in F1) and (ptc2 in F1):
106        copy = F1[:]
107        i = F1.index(pt2)
108        j = F1.index(ptc2)
109        copy.remove(pt2)
110        copy.remove(ptc2)
111        k = F1.index(copy[0])
112        l = F1.index(copy[1])
113        rep = ('[' + F2[i] + F2[j] + ']', '[' + F1[k] + F1[l] + ']', '[' + F2[k] + F2[l] + ']', '[' + pt2 + ptc2 + ']')
114    elif (pt2 in F2) and (ptc2 in F2):
115        copy = F2[:]
116        i = F2.index(pt2)
117        j = F2.index(ptc2)
118        copy.remove(pt2)
119        copy.remove(ptc2)
120        k = F2.index(copy[0])
121        l = F2.index(copy[1])
122        rep = ('[' + F1[i] + F1[j] + ']', '[' + F1[k] + F1[l] + ']', '[' + F2[k] + F2[l] + ']', '[' + pt2 + ptc2 + ']')
123    else:
124        if pt2 in F1:
125            i = F1.index(pt2)
126        else:
127            i = F2.index(pt2)
128        rep = ('[' + F1[(i + 1) % len(F1)] + F2[(i + 1) % len(F1)] + ']', '[' + F1[(i + 2) % len(F1)] + F2[(i + 2) % len(F1)] + ']', '[' + F1[(i + 3) % len(F1)] + F2[(i + 3) % len(F1)] + ']', '[' + pt2 + ptc2 + ']')
129
130    return tuple(rep)
131
132def espace():
133    """Face 1, Face 2"""
134    noms_pts = (noms_sommets(8))
135    F1 = noms_pts[0:4]
136    F2 = noms_pts[4:8]
137    pt = noms_pts[random.randrange(0, len(noms_pts))]
138    rp1 = reponse1(pt, F1, F2)
139    pt1 = noms_pts[random.randrange(0, len(noms_pts))]
140    conn1 = connect(pt1, F1, F2)
141    pt2 = noms_pts[random.randrange(0, len(noms_pts))]
142    conn2 = connect(pt2, F1, F2)
143    ptc1 = conn1[random.randrange(0, len(conn1))]
144    ptc2 = conn2[random.randrange(0, len(conn2))]
145    rp2 = u"%s, %s, %s et %s sont les arêtes perpendiculaires à %s." % reponse2(pt1, ptc1, F1, F2)
146    rp3 = u"%s, %s et %s sont les arêtes parallèles à %s." % reponse3(pt2, ptc2, F1, F2)
147    exo = ["\\exercice",
148         u"Les figures 1 et 2 représentent le même cube %s%s%s%s%s%s%s%s.\\\ " % tuple(noms_pts),
149         "\\psset{xunit=1.0cm,yunit=1.0cm,dotstyle=*,dotsize=3pt 0,linewidth=0.8pt,arrowsize=3pt 2,arrowinset=0.25}",
150         "\\begin{pspicture*}(-2,-0.38)(15,4.5)",
151         "\\psframe[fillstyle=solid,fillcolor=darkgray,framearc=0.2](-1,3.5)(-0.5,4)",
152         "\\rput[bl](-0.85,3.65){\\white{\\textbf{$1$}}}",
153         "\\psline[linestyle=dashed,linecolor=Maroon,dash=4pt 4pt](3.5,1)(1.5,1)",
154         "\\psline[linestyle=dashed,linecolor=Maroon,dash=4pt 4pt](1.5,1)(1.5,3)",
155         "\\psline[linestyle=dashed,linecolor=Maroon,dash=4pt 4pt](1.5,1)(0.5,0)",
156         "\\psframe[linecolor=Maroon](0.5,0)(2.5,2)",
157         "\\psline[linecolor=Maroon](1.5,3)(3.5,3)",
158         "\\psline[linecolor=Maroon](3.5,3)(3.5,1)",
159         "\\psline[linecolor=Maroon](0.5,2)(1.5,3)",
160         "\\psline[linecolor=Maroon](2.5,2)(3.5,3)",
161         "\\psline[linecolor=Maroon](2.5,0)(3.5,1)",
162         "\\rput[bl](0.22,2.08){%s}" % F1[0],
163         "\\rput[bl](2.28,2.16){%s}" % F1[1],
164         "\\rput[bl](2.6,-0.22){%s}" % F1[2],
165         "\\rput[bl](0.15,-0.22){%s}" % F1[3],
166         "\\rput[bl](1.4,3.08){%s}" % F2[0],
167         "\\rput[bl](3.58,3.04){%s}" % F2[1],
168         "\\rput[bl](3.58,1.04){%s}" % F2[2],
169         "\\rput[bl](1.58,1.04){%s}" % F2[3],
170         "\\psline[linecolor=Maroon](5.2,-04)(5.2,4)",
171         "\\psframe[fillstyle=solid,fillcolor=darkgray,framearc=0.2](5.7,3.5)(6.2,4)",
172         "\\rput[bl](5.85,3.65){\\white{\\textbf{$2$}}}",
173         "\\psline[linecolor=Maroon](8.48,2.71)(7.18,2.42)",
174         "\\psline[linecolor=Maroon](7.18,2.42)(7.18,0.46)",
175         "\\psline[linestyle=dashed, linecolor=Maroon, dash=4pt 4pt](7.18,0.46)(8.48,0.75)",
176         "\\psline[linestyle=dashed, linecolor=Maroon, dash=4pt 4pt](8.48,0.75)(8.48,2.71)",
177         "\psline[linecolor=Maroon](10,2.46)(8.7,2.17)",
178         "\\psline[linecolor=Maroon](8.7,2.17)(8.7,0.21)",
179         "\\psline[linecolor=Maroon](8.7,0.21)(10,0.5)",
180         "\\psline[linecolor=Maroon](10,0.5)(10,2.46)",
181         "\\psline[linecolor=Maroon](10,2.46)(8.48,2.71)",
182         "\\psline[linecolor=Maroon](7.18,2.42)(8.7,2.17)",
183         "\\psline[linecolor=Maroon](8.7,0.21)(7.18,0.46)",
184         "\\psline[linestyle=dashed,dash=4pt 4pt, linecolor=Maroon](10,0.5)(8.48,0.75)",
185         "\\rput[bl](8.68,2.27){%s}" % rp1[0],
186         "\\rput[bl](10.06,2.5){%s}" % rp1[1],
187         "\\rput[bl](8.71,-0.1){%s}" % rp1[3],
188         "\\end{pspicture*}",
189         "\\begin{enumerate}",
190         u"\\item Compléter les sommets manquants de la figure 2.",
191         u"\\item Donner toutes les arêtes perpendiculaires à [%s%s]." % (pt1, ptc1),
192         u"\\item Donner toutes les arêtes parallèles à [%s%s]." % (pt2, ptc2),
193         "\\end{enumerate}"]
194    cor = ["\\exercice*",
195         u"Les figures 1 et 2 représentent le même cube %s%s%s%s%s%s%s%s.\\\ " % tuple(noms_pts),
196         "\\psset{xunit=1.0cm,yunit=1.0cm,dotstyle=*,dotsize=3pt 0,linewidth=0.8pt,arrowsize=3pt 2,arrowinset=0.25}",
197         "\\begin{pspicture*}(-2,-0.38)(15,4.5)",
198         "\\psframe[fillstyle=solid,fillcolor=darkgray,framearc=0.2](-1,3.5)(-0.5,4)",
199         "\\rput[bl](-0.85,3.65){\\white{\\textbf{$1$}}}",
200         "\\psline[linestyle=dashed,linecolor=Maroon,dash=4pt 4pt](3.5,1)(1.5,1)",
201         "\\psline[linestyle=dashed,linecolor=Maroon,dash=4pt 4pt](1.5,1)(1.5,3)",
202         "\\psline[linestyle=dashed,linecolor=Maroon,dash=4pt 4pt](1.5,1)(0.5,0)",
203         "\\psframe[linecolor=Maroon](0.5,0)(2.5,2)",
204         "\\psline[linecolor=Maroon](1.5,3)(3.5,3)",
205         "\\psline[linecolor=Maroon](3.5,3)(3.5,1)",
206         "\\psline[linecolor=Maroon](0.5,2)(1.5,3)",
207         "\\psline[linecolor=Maroon](2.5,2)(3.5,3)",
208         "\\psline[linecolor=Maroon](2.5,0)(3.5,1)",
209         "\\rput[bl](0.22,2.08){%s}" % F1[0],
210         "\\rput[bl](2.28,2.16){%s}" % F1[1],
211         "\\rput[bl](2.6,-0.22){%s}" % F1[2],
212         "\\rput[bl](0.15,-0.22){%s}" % F1[3],
213         "\\rput[bl](1.4,3.08){%s}" % F2[0],
214         "\\rput[bl](3.58,3.04){%s}" % F2[1],
215         "\\rput[bl](3.58,1.04){%s}" % F2[2],
216         "\\rput[bl](1.58,1.04){%s}" % F2[3],
217         "\\psline[linecolor=Maroon](5.2,-04)(5.2,4)",
218         "\\psframe[fillstyle=solid,fillcolor=darkgray,framearc=0.2](5.7,3.5)(6.2,4)",
219         "\\rput[bl](5.85,3.65){\\white{\\textbf{$2$}}}",
220         "\\psline[linecolor=Maroon](8.48,2.71)(7.18,2.42)",
221         "\\psline[linecolor=Maroon](7.18,2.42)(7.18,0.46)",
222         "\\psline[linestyle=dashed,dash=4pt 4pt, linecolor=Maroon](7.18,0.46)(8.48,0.75)",
223         "\\psline[linestyle=dashed,dash=4pt 4pt, linecolor=Maroon](8.48,0.75)(8.48,2.71)",
224         "\psline[linecolor=Maroon](10,2.46)(8.7,2.17)",
225         "\\psline[linecolor=Maroon](8.7,2.17)(8.7,0.21)",
226         "\\psline[linecolor=Maroon](8.7,0.21)(10,0.5)",
227         "\\psline[linecolor=Maroon](10,0.5)(10,2.46)",
228         "\\psline[linecolor=Maroon](10,2.46)(8.48,2.71)",
229         "\\psline[linecolor=Maroon](7.18,2.42)(8.7,2.17)",
230         "\\psline[linecolor=Maroon](8.7,0.21)(7.18,0.46)",
231         "\\psline[linestyle=dashed,dash=4pt 4pt, linecolor=Maroon](10,0.5)(8.48,0.75)",
232         "\\rput[bl](10.05,0.2){%s}" % rp1[2],
233         "\\rput[bl](8.71,-0.1){%s}" % rp1[3],
234         "\\rput[bl](8.1,0.79){%s}" % rp1[6],
235         "\\rput[bl](6.8,0.2){%s}" % rp1[7],
236         "\\rput[bl](10.06,2.5){%s}" % rp1[1],
237         "\\rput[bl](8.68,2.27){%s}" % rp1[0],
238         "\\rput[bl](7.08,2.54){%s}" % rp1[4],
239         "\\rput[bl](8.5,2.83){%s}" % rp1[5],
240         "\\end{pspicture*}",
241         "\\begin{enumerate}",
242         u"\\item Compléter les sommets manquants de la figure 2.",
243         u"\\item Donner toutes les arêtes perpendiculaires à [%s%s].\\par " % (pt1, ptc1),
244         rp2,
245         u"\\item Donner toutes les arêtes parallèles à [%s%s]. \\par " % (pt2, ptc2),
246         rp3,
247         "\\end{enumerate}"]
248    return (exo, cor)
249
250espace.description = u'Représentation dans l\'espace'
Note: See TracBrowser for help on using the repository browser.