source: pyromaths/trunk/fuentes/src/pyromaths/ex/sixiemes/symetrie.py @ 1637

Last change on this file since 1637 was 1637, checked in by Juanma, 5 years ago

WIP Pyromaths i18n

File size: 4.3 KB
Line 
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3#
4# Pyromaths
5# Un programme en Python qui permet de créer des fiches d'exercices types de
6# mathématiques niveau collège ainsi que leur corrigé en LaTeX.
7# Copyright (C) 2006 -- Jérôme Ortais (jerome.ortais@pyromaths.org)
8#
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22#
23
24import random
25from math import atan, cos, pi, sin
26
27#===============================================================================
28# Symétrique d'une figure par rapport à une droite avec quadrillage
29#===============================================================================
30
31
32def valeurs_quad2(nb_pts):
33    vals = []
34    for i in range(nb_pts):
35        angle = random.randrange((i * 360) / nb_pts, ((i + 1) * 360) / 
36                                 nb_pts)
37        vals.append(((random.randrange(1, 7) * .5) * cos((angle * pi) / 
38                    180), (random.randrange(1, 7) * .5) * sin((angle * 
39                    pi) / 180)))
40    return vals
41
42
43def valeurs_quad(nb_pts):
44    vals = []
45    for i in range(nb_pts):
46        (alpha, beta) = ((i * 360) / nb_pts, ((i + 1) * 360) / nb_pts)
47        (x, y, angle) = (0, 0, 0)
48        while x == 0 or angle < alpha or angle > beta:
49            (x, y) = (random.randrange(-6, 7) * .5, random.randrange(-6,
50                      7) * .5)
51            if x > 0:
52                angle = int((atan((y * 1.0) / x) * 180) / pi + 360) % \
53                    360
54            if x < 0:
55                angle = int((atan((y * 1.0) / x) * 180) / pi + 180)
56        vals.append((x, y))
57    return vals
58
59
60def place_pts(vals, angle):
61    txt = [\\pstGeonode[PointSymbol=x,PointName=none]"]
62    for i in range(len(vals)):
63        txt.append("(%s,%s)" % vals[i])
64        txt.append("{%s}" % chr(i + 97))
65    txt.append("\n\\pstGeonode[PointSymbol=none,PointName=none](-4.5;%s){A}(4.5;%s){B}" % (angle, angle))
66    txt.append("\n\\psline[linecolor=Black, linewidth=1pt, nodesep=-4.5](A)(B)")
67    txt.append("\n\\pspolygon[linecolor=Maroon, linewidth=1pt]")
68    for i in range(len(vals)):
69        txt.append("(%s)" % chr(i + 97))
70    return ("").join(txt)
71
72
73def SymetrieQuadrillage():
74    exo = ["\\exercice", _(u"Construire la symétrique de chacune des figures par rapport à la droite en"), _(u"utilisant le quadrillage :\\par"), "\\psset{unit=.9cm}"]
75    cor = ["\\exercice*", _(u"Construire la symétrique de chacune des figures par rapport à la droite en"), _(u"utilisant le quadrillage :\\par"), "\\psset{unit=.9cm}"]
76
77    nbpts = 5
78    langles = [0, 90, 45, 135]
79    for j in range(3):
80        angle = langles.pop(random.randrange(len(langles)))
81        vals = valeurs_quad(nbpts)
82        txt = place_pts(vals, angle)
83        exo.append("\\begin{pspicture*}(-3,-3)(3,3)")
84        exo.append("\\psgrid[subgriddiv=2,gridlabels=0pt]")
85        exo.append(txt)
86        cor.append("\\begin{pspicture*}(-3,-3)(3,3)")
87        cor.append("\\psgrid[subgriddiv=2,gridlabels=0pt]")
88        cor.append(txt)
89        txt_cor = "\\pstOrtSym[PointSymbol=x,PointName=none]{A}{B}{"
90        for i in range(len(vals)):
91            if i > 0:
92                txt_cor += ","
93            txt_cor += "%s" % chr(i + 97)
94        txt_cor += "}["
95        for i in range(len(vals)):
96            if i > 0:
97                txt_cor += ","
98            txt_cor += "%s1" % chr(i + 97)
99        txt_cor += "]\n  \pspolygon[linecolor=Black, linestyle=dashed, linewidth=1pt]"
100        for i in range(len(vals)):
101            txt_cor += "(%s1)" % chr(i + 97)
102        cor.append(txt_cor)
103        exo.append("\\end{pspicture*}")
104        cor.append("\\end{pspicture*}")
105        if j < 2:
106            exo.append("\\hfill")
107            cor.append("\\hfill")
108    return (exo, cor)
109
110SymetrieQuadrillage.description = u'Symétrie et quadrillages'
Note: See TracBrowser for help on using the repository browser.