Archive mensuelle 19 avril 2019

Section d’un cube par un plan défini par 3 points sur différentes faces

Nous allons voir dans cet article comment trouver la section d’un cube par un plan quand on connaît 3 points sur 3 arêtes de ce cube, chacun des points n’étant pas sur une face où se trouve l’un des deux autres.

On souhaite trouver la section du cube par le plan (IJK)

Etape 1 : on projette orthogonalement un point sur l’arête parallèle à celle où il se trouve et contenue dans une face où se trouve l’un des deux autres points.

Ici, on va projeter le point J sur [BF] car [BF] est contenue dans une face où se trouve K. On obtient un point que l’on nomme \(P_1\).

Projeté orthogonal d’un point sur une arête opposée

Etape 2 : on trace un triangle passant par le sommet opposé à la face contenant le point choisi et son projeté.

Ici, on trace \(AP_1\) et \(AJ\). Elles se coupent en un point \(P_2\).

On trace un triangle

Etape 4 : on trouve enfin un point qui appartient à la section cherchée.

Les points K et \(P_2\) appartiennent à la même face (ABFE) donc la droite \((KP_2)\) coupe l’arête [AE] (car elles ne sont pas parallèles). On obtient alors le point \(P_3\).

Un point appartenant à la section

On a ainsi l’intersection des plans (IJK) et (ADHE):

Intersection d’une face du cube avec le plan (IJK)

ainsi que celle des plans (IJK) et (ABFE):

Intersection d’une autre face du cube avec (IJK)

Etape 5 : on trace des parallèles

On trace maintenant la droite parallèle à \((KP_3)\) passant par J : elle coupe l’arête [DC] en \(P_4\):

On trace une parallèle pour trouver un autre côté de la section du cube par le plan (IJK)

On trace ensuite \([IP_4]\) qui est un autre côté de la section cherchée:

Puis la parallèle à \((IP_3)\) passant par J, qui coupe [GF] en \(P_5\):

On trace une deuxième parallèle

On trace enfin \([KP_5]\) qui ferme la section cherchée:

La section est désormais fermée

La section du cube par le plan (IJK) est le polygone \(KP_5JP_4IP_3\):

La section du cube par le plan est obtenue
Créer un fichier LaTeX avec Python

Créer un fichier LaTeX avec Python

Créer un fichier LaTeX avec Python. Dans un article précédent, je vous expliquais comment, dans un fichier \(\LaTeX\), on pouvait se servir de Python grâce à l’extension Pythontex.

Maintenant, je vais vous expliquer comment faire l’inverse, à savoir comment créer et compiler un fichier \(\LaTeX\) avec un programme Python.

Ecrire un isotope en LaTeX

Allons droit au but : quand on écrit le code suivant en \(\LaTeX\):

^{235}_{92}U

il s’affiche ceci \(^{235}_{92}U\). Les nombres ne sont pas alignés à droite, ce qui peut déranger certains yeux (dont les miens).

Il existe plusieurs façons d’y remédier. Nous allons voir quelques façons de définir une macro \isotope ayant 3 arguments.

Python et fonction à nombre variable d’arguments

Voici une astuce qui pourra sans doute servir à plusieurs d’entre vous : je vais vous parler des fonctions Python qui peuvent admettre un nombre variable d’arguments.

fonction Python à un nombre variable d'arguments
fonction Python à un nombre variable d’arguments

Une fonction peut quelques fois devoir prendre un nombre variable d’arguments. Par exemple, si l’on souhaite calculer le PGCD de plusieurs nombres, on aimerait que la fonction PGCD (par exemple) accepte 2, 3, 4, … arguments.

Calcul du PGCD de plusieurs nombres

Voici sur un exemple comment faire:

def pgcd(*n):
	def _pgcd(a,b):
		while b!=0:
			a,b = b,a%b
		return a
	p = _pgcd(n[0],n[1])
	for x in n[2:]:
		p = _pgcd(p,x)
	return p

print(pgcd(165,515,225,65))

Cette méthode s’appelle l’unpacking. Regardons à travers un deuxième exemple.

Somme de plusieurs nombres

On va définir ici une fonction “somme”:

def somme(*n):
    s = 0
    for i in n:
        s += i
    return s

Cette fonction permet de calculer la somme d’un nombre variable d’arguments. Par exemple:

somme(1,2,3,4,5)

retourne $$1+2+3+4+5=15.$$Et:

somme(15,12,2,20,12,1,2)

retourne:$$15+12+2+20+12+1+2=64.$$

  • 1 splat (1 étoile) : liste
  • 2 splats (2 étoiles) : dictionnaire

En effet, si l’on souhaite récupérer les arguments dans un dictionnaires, on utilise le double splat.

Un exemple basique avec double splat

def fonction(**kwargs):
    for key,value in kwargs.items():
        print('{} -> {}'.format(key,value))

fonction(a = 1, b = 2, c = 5)
a -> 1
b -> 2
c -> 5

À travers cet exemple, on voit bien le fonctionnement de l’unpacking avec le double splat. Il est à noter qu’en général, on note kwargs pour le double splat (contraction de “keyword arguments”), mais ce n’est pas obligatoire.

On peut aussi mélanger le splat et le double splat.

Mélange de splat et double splat

def fonction(*args , **kwargs):
    for i in args:
        print(i)
    for key,value in kwargs.items():
        print('{} -> {}'.format(key,value))
        
fonction(48 , 52 , 63 , a = 1, b = 2, c = 5)
48
52
63
a -> 1
b -> 2
c -> 5

Python et ensembles de Julia

L’ensemble de Julia est, pour un nombre complexe c donné, l’ensemble des points d’affixes \(z_0\) tels que la suite définie pour tout entier naturel n par \(z_{n+1}=z_n^2+c\) est bornée.

Selon les valeurs de c, on peut obtenir des ensembles plutôt jolis:

Pour les personnes abonnées à mathweb.fr, vous trouverez un code Python ainsi que les 10 images (sans marquage) ci-dessous:

Cette partie est réservée aux abonné.e.s de ce site.
Si vous êtes abonné·e·s, merci de vous identifier pour visualiser le contenu dans son intégralité.

Un IDE Python sympathique

Quand on décide d’installer Python sur sa machine, il est par défaut accompagner d’un IDE (Integrated Development Environment) plus que basique. Il est suffisant, mais pas trop jolie et peu pratique (car si on ouvre une fenêtre contenant notre programme et si on exécute ce dernier, le résultat s’affiche dans la console, ce qui fait 2 fenêtres).

C’est la raison pour laquelle j’ai souhaité aujourd’hui changer d’IDE.

Quelques essais

Eclipse

J’ai commencé par télécharger Eclipse qui, soit-disant, est le must. Mais lors du lancement de l’installation, une fenêtre s’ouvrit pour me signaler qu’il fallait une plateforme JDK 7+. Je télécharge donc JDK11, mais même après cela, Eclipse ne put s’installer. N’étant pas du tout patient, je tenta un autre IDE…

Atom

Ayant entendu parlé d’Atom, je l’installai pour l’essayer… Mais je n’y ai rien compris (je ne dis pas que Atom est compliqué… je dis juste que je suis une grosse merde et que je n’ai pas réussi à comprendre comment compiler un programme Python). Moi, il me faut un truc simple et rapide d’utilisation car je n’ai pas que ça à faire de ma vie (rester des heures à essayer de comprendre comment fonctionne un logiciel); il faut que le bousin soit pédagogue avec ses utilisateurs, même les plus cons (comme moi), ce qui n’est pas le cas…

Sublime Text

Jamais 2 sans 3… J’essayai alors le logiciel au nom pourri… Et là ! Miracle !

Déjà, le téléchargement s’effectua en quelques secondes (programme très léger) et l’installation aussi. Et puis, en chargeant un programme Python, on voit tout de suite comment faire pour le compiler:

La compilation est rapide (un CTRL+B suffit), le design par défaut plus que correct (même si on peut le changer). Bref, cet IDE est top !

Malheureusement, il nécessite une licence. Pour le moment, il fonctionne mais on verra sur la durée… Je ne manquerai pas de vous tenir informé.e.s.

M.A.J. du 10 mai 2019 : cet éditeur s’avère en définitive très peu intéressant car on ne peut pas compiler les scripts qui nécessitent d’entrer au clavier des données… Ce qui est plus que fâcheux ! Donc je le déconseille.

Spyder

Après avoir testé Sublime Text, je jette mon dévolu sur Spyder.

Je vais donc sur la page https://www.anaconda.com/distribution/ afin d’installer le tout. Bon, là, je me suis fait arnaqué car ça m’installe Anaconda Navigator ainsi que la dernière version de Python (3.7). Mais ça, c’est pas bien grave car je tournais avec Python 3.6 donc une petite M.A.J. ne fait pas de mal… Il faut prévoir quand-même pas mal de temps entre le téléchargement (plus de 600 Mo) et l’installation. Mais le résultat en vaut le coup !

Spyder 3
Aperçu de Spyder 3

C’est exactement ce que je cherchais : un cadre pour le code, un autre pour la console et en plus, il y en a un pour l’affichage divers (variables, fichiers). Et le tout est gratuit !

Ajout du 26 juin 2019 : Spyder est bien, mais il est très long à se lancer…

Pyzo

Comme Spyder est trop long à se lancer, j’ai installé Pyzo, sur recommandation de mon éditeur… Et je suis agréablement surpis car il est très léger et l’interface graphique est tout aussi pratique que Spyder.

Interface Pyzo
  • La fenêtre de gauche, la plus grande, est dédiée au(x) script(s);
  • la fenêtre de droite, en haut, est la console : c’est ici que le script s’exécute;
  • au-dessous, on trouve une fenêtre récapitulant toutes les modules appelés, les classes, les fonctions , etc.
  • et enfin, une fenêtre est réservée à l’arborescence.

Ajout du 4 octobre 2019 : après plusieurs mois d’utilisation, j’ai constaté que Pyzo était une bonne grosse bouse. En effet, certains programmes ne fonctionnent tout simplement pas avec Pyzo alors qu’ils fonctionnent très bien avec l’IDLE de base de Python. Je me suis pris la tête plus d’une fois à cause de ça… et ce n’est pas normal! Ainsi, si vous souhaitez faire des programmes avancés, Pyzo est à fuire !

Visual Studio Code

Après cette fâcheuse expérience, j’ai jeté mon dévolu sur Visual Studio Code. Il est léger, mais il faut installer en plus une extension pour pouvoir compiler en Python. Ce n’est pas très difficile car il suggère automatiquement l’extension appropriée quand on sauvegarde un fichier en .py…

Après quelques mois d’essais, j’en suis presque satisfait. Comme Sublim text, il ne permet pas d’entrer des commandes en mode console, ce qui est quelques fois pénible. À part cela, l’interface graphique est sympathique et il est assez rapide. Autre inconvénient : pour compiler, il faut cliquer avec le bouton droit de la souris et sélectionner “Run Python infile terminal” (pas de raccourci à ma connaissance… mais s’il y a moment d’en définir un et que vous le savez, n’hésitez pas à m’en informer !).

Interface Visual Studio Code