MATHEMATIQUES EN FORME(S)

“Il faut traiter la nature par le cylindre, la sphère et le cône.” cette sitation de Paul Cézanne , indique toute l'importance que le peintre accorde à la représentation des solides élémentaires pour décrire la nature et ce qui l'entoure. Les perspectives vont donner l'illusion de profondeur, de relief, sur une toile ou un écran désespéremment plat.

Dans cette page, nous allons représenter une sphère, un cylindre et un cône de révolution à l'écran en programmant en Python. Mais avant de programmer, une analyse mathématique de la situation est indispensable qui doit faire émerger une idée qui permettra de résoudre le problème. Cette idée, sera la ligne directrice qui permettra de concevoir les différentes parties d'un programme en Python. Pour la sphère, il sera exploré trois idées différentes menant à des représentations différentes, vous découvrirez la paramétrisation de courbes et de surfaces. Les plus curieux pourront ensuite réfléchir aux représentations du cylindre et du cône.

Il n'est pas indispensable de traiter toutes les parties de programmation et peu de connaissances en Python sont nécessaires.
Vous aurez à utiliser quelques formules de calcul de volume, un peu de probabilité, un peu de géométrie analytique (distance entre deux points dans l'espace) et de la trigonométrie.

La sphère

La première partie est accessible dès la troisième, en donnant la formule de la distance entre deux points de l'espace. Pour la deuxième et la troisième partie, de simples projections orthogonales et un peu de trigonométrie permettront d'obtenir les coordonnées d'un point de la sphère unité, en fonction de deux angles, avec un peu de concentration, tout lycéen peut les aborder.


Nous utiliserons dans cette page le repère de l'espace(O,I,J,K)



Une représentation où le hasard prend toute sa place

Une sphère de centre A est très facile à définir mathématiquement, c'est l'ensemble des points de l'espace situés à une distance donnée du point A. La distance entre A et un point quelconque de la sphère est le rayon. Dans un premier temps, nous allons tenter d'utiliser cette seule définition, pour représenter une sphère unité à l'écran, en programmant en python.

La sphère de rayon 1, centrée en l'origine d'un repère orthonormé de l'espace, est appelée sphère unité. Elle est contenue à l'intérieur d'un cube de 2 unités de côté.

Idée à exploiter :
On se propose de tirer au hasard un point de l'intérieur de ce cube, de tester s'il est à une distance de 1 unité du centre O et si c'est le cas, on l'affiche.


Cliquer sur Run de la fenêtre ci-contre afin de tenter d'afficher des points de la sphère unité.
Pourquoi ne voit-on aucun point affiché ?

Malheureusement, même en choisisant un nombre de points très grand, aucun point ne s'affiche, en effet la probabilité que l'on soit à une distance de 1 de l'origine est nulle. Il faut donc modifier la condition d'appartenance à la sphère, d'autant plus qu'en informatique 0.1+0.2 ne vaut pas 0.3. et qu'ainsi l'on ne teste jamais une égalité de réels. Le codage de nombreux réels ne pouvant se faire sur un nombre fini de bits, la machine ne manipule souvent que des valeurs approchées.

Idée complémentaire

Pour trouver des points sur cette sphère, nous allons lui donner de l'épaisseur. Une sphère est une surface, et n'a donc pas de volume, pour en obtenir un, on se propose de créer "une coquille" sphérique, comme celle d'un oeuf, nous allons donc donner une épaisseur notée e à cette coquille. Ainsi nous allons tester si les points créés aléatoirement sont dans cette "coquille unité", c'est à dire dans l'espace compris entre deux sphères: la sphère unité et la sphère de centre 0 et de rayon 1-e.


nb=2000
c=0
for i in range(nb):
    x=uniform(-1,1)# x prend un nombre au hasard entre -1 et 1
    y=uniform(-1,1)
    z=uniform(-1,1)
    if abs(sqrt(x*x+y*y+z*z)-1)<=0.1:
       ax.scatter(x,y,z,  marker='.', s=20, )
       c=c+1
print(c, 'points affichés sur ',nb, 'crées')
print('soit un taux de ',c*100/nb,'%')
			

Calculer le volume d'un cube de côté 2 unités.
Rechercher comment calculer le volume d'une boule ?
Calculer le volume de la boule unité (rayon = 1 unité).
Calculer le volume de la coquille unité d'épaisseur 0.1 unité.
Rappeler ou rechercher comment se calcule la distance entre deux points dans l'espace dans un repère orthonormé.
L'expression : sqrt(x*x+y*y+z*z) permet de calculer la distance séparant le point M(x,y,z) et quel autre point ?
Dans cet extrait de code Python, ci-dessus, quelle est l'épaisseur de la coquille sphérique ?"
La coquille sphérique unité est contenue à l'intérieur d'un cube de 2 unités de côté, en raisonnant avec les volumes, quelle est la probabilité qu'un point de ce cube soit dans la coquille d'épaisseur e ?.
En déduire la probabilité qu'un point du cube s'affiche, pour l'épaisseur de 0.01 unité.
En déduire la probabilité qu'un point du cube s'affiche, pour l'épaisseur de 0.1 unité.

Cliquer sur Run de la fenêtre ci-contre afin de tenter d'afficher des points de la sphère unité.
Les tests effectués en Python avec 2000 points donnent-ils des taux du même ordre que les probabilités calculées?
Peut-on prévoir le nombre exact de points affichés ?

Voici une représentation de la sphère unité obtenue en saisissant 2000 pour le nombre de points à créer et 0.05 pour l'épaisseur.

En jouant sur la couleur des points, en fonction d'une de leurs coordonnées, on parvient à mieux rendre compte du relief.

Une représentation de géographe

Pour représenter la Terre et pour localiser un lieu à sa surface, il a été créé un réseau de parallèles et de méridiens.

Quelques définitions :

Idée à exploiter :
On se propose dans cette partie de représenter la sphère par ces lignes si utiles aux géographes.


La position du point P sur une sphère est généralement définie par la distance r et par les angles θ (colatitude) et φ (longitude). Mais les géographes utilisent la latitude notée δ , la longitude φ et l'altitude mesurée par rapport au niveau de la mer ou à une ellipsoïde de référence.

Dans le repère (O,I,J,K) déterminer les coordonnées de P en fonction de la longitude φ, de la latitude δ et de r. (On pourra projeter orthogonalement P sur le plan (Oxy) et sur l'axe (Oz)).

Les coordonnées d'un point quelconque de la sphère unité (r=1) ne dépendent donc que de deux paramètres φ et δ.

Voici le code Python, ayant permis d'afficher des parallèles et des méridiens, ainsi que la position de Paris à partir de sa latitude et sa longitude exprimées en degré.


# importation des bibliothèques mathématiques et graphiques ou de fonctions des bibliothèques
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d  
import numpy as np
from numpy import pi, cos, sin

#Préparation de la figure en perspective
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d') 

#Méridiens
p = np.linspace(-pi, pi, 15) # p est une liste de 15 nombres régulièrement répartis dans l'intervalle [-pi, pi]
delta =np.linspace(-pi, pi, 100)
for phi in p:
    x = cos(phi)*cos(delta)  
    y = sin(phi)*cos(delta)  
    z = sin(delta)
    ax.plot(x, y, z, )  

#Parallèles
phi = np.linspace(-pi, pi, 100)
t =np.linspace(-pi, pi, 15)
for delta in t:
    x = cos(phi)*cos(delta)  
    y = sin(phi)*cos(delta)  
    z = sin(delta)
    ax.plot(x, y, z, )  

#latitude de Paris en radians
delta=48*pi/180
#longitude de Paris en radians
phi=2*pi/180      
# vecteur d'origine O pointant sur Paris
ax.quiver(0,0,0,cos(phi)*cos(delta), sin(phi)*cos(delta), sin(delta),length=1.0, normalize=True, color='blue', arrow_length_ratio=0.15)
# texte à l'emplacement de Paris
ax.text(cos(phi)*cos(delta), sin(phi)*cos(delta), sin(delta), 'Paris', fontsize=20, color='blue')


# affichage 
plt.title("Cordonnées sphériques")
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.tight_layout()
plt.show()
			

Afin de faciliter le repérage sur la figure, on souhaite tracer en rouge le méridien de Greenwich qui sert d'origine aux longitudes (φ=0). Ecrire en python les lignes de code nécessaires.
Afin de faciliter le repérage sur la figure, on souhaite tracer en rouge l'équateur qui sert d'origine aux latitudes (δ=0). Ecrire en python les lignes de code nécessaires.
Soit d une mesure en degré arrondie à l'unité et r sa mesure en radian. Exprimer r en fonction de d
Compléter ce code afin de demander à l'utilisateur de saisir les coordonnées GPS d'une ville du monde, et de placer une flèche la pointant sur la figure.

Le système constitué des expressions de x, y et z, en fonction de φ et δ permet une paramétrisation cartésienne de la sphère. Il en existe bien d'autres, que l'on peut visualiser par leurs lignes de coordonnées. De façon générale, la paramétrisation, d'une courbe, d'une surface est une chose très importante en mathématiques et en sciences.


Une représentation en biologie

Ci-dessus est représenté le SARS CoV-2 et sa protéine pointe (spike). Celle-ci semble régulièrement répartie à la surface du virus et l'on souhaiterait obtenir une telle répartition sur une figure obtenue en Python. La première méthode aléatoire ne permet pas de dessiner un nombre souhaité de protéine pointe et la deuxième doit être retravaillée, afin que la répartition des protéines à la surface du virus paraisse à la fois régulière et naturelle.

Idée à exploiter :
On va placer un seul point par parallèle, afin de pouvoir les dénombrer et tenter de les répartir harmonieusement en longitude.

Du nombre d'or à l'angle d'or

Le nombre d'or φ, qui évoque l’harmonie des proportions et l’esthétique dans les arts est déjà présent dans les Eléments d'Euclide.

` φ= frac(1 +sqrt(5))(2)`

Partageons un disque en deux secteurs angulaires tels que la mesure du plus grand angle a divisée par celle du petit angle b soit égale au nombre d'or φ. Le plus petit angle b sera appelé l'angle d'or.

Exprimer l'angle d'or b en fonction de φ
Montrer ensuite que la mesure de l'angle d'or b, exprimé en radians vaut `pi( 3-sqrt(5) ) `

Nous allons réutiliser les mêmes notations que dans la partie précédente.

Soit h la cote, (ou la hauteur) du point P situé sur la sphère unité, exprimer le rayon r du parallèle passant par P en fonction de h.
Exprimer en fonction de θ et de R, l'abscisse et l'ordonnée de P

Nous souhaitons maintenant placer nb points répartis de façon harmonieuse et naturelle à la surface d'une sphère unité. Pour cela,nous allons créer une liste de nb nombres compris entre -1 et 1 qui seront les hauteurs des points à placer sur la sphère et à chaque valeur, nous lui associerons un multiple de l'angle d'or qui deviendra l'angle φ permettant le placement du point sur la sphère.

La répartition des 200 points à la surface de la sphère obtenue avec l'angle d'or est harmonieuse et naturelle et pourrait permettre la modélisation du SARS CoV-2. D'autres valeurs permettent également un rendu naturel, mais nous remarquons que la répartition n'est pas la même en fonction des valeurs de φ choisies et certaines sont très régulières ou curvilignes et ne correspondraient pas du tout à la représentation de la surface du virus.

Vous pouvez essayer d'autres valeurs et observer les répartitions obtenues


Cliquer sur Run dans la fenêtre ci-dessous, saisir des valeurs réelles qui remplaceront l'angle d'or, et observer la figure obtenue et la répartition des points rouges
Copiez le code de la deuxième partie et modifiez le afin de représenter les figures ci-dessus.

Le cylindre

Un cylindre d'axe (d) et de rayon r est l'ensemble des points situés à la distance r de l'axe (d). Tout plan perpendiculaire à l'axe coupe le cylindre en un cercle de rayon r et toute droite parallèle à (d) situé à une distance r de (d)est sur le cylindre.

Idée à exploiter :
Représenter ces cercles (parallèles) et ces droites (méridiens).

Nous allons représenter le cylindre d'axe (Oz) et de rayon 1, avec z évoluant dans l'intervalle [-1, 1]. Soit M un point de ce cylindre situé à la hauteur h du plan (Oxy), le projeter sur le plan (Oxy) parallèlement à (OZ) en H. On notera φ la mesure de l'angle formé entre l'axe (Ox) et (OH). On a alors cette figure :


Exprimer en fonction de φ les coordonnées (x,y) de H, dans le repère (O,I,J)
En déduire les coordonnées (x,y,z) de M en fonction de φ et h, dans le repère (O,I,J,K)

Le cône

Dans cette partie, il faudra représenter un cône de révolution d'axe (Oz) et de sommet O. Soit (d) une droite coupant (Oz) en O. Le cône de révolution d'axe (Oz) généré par (d) s'obtient par la rotation de (d) autour de l'axe (Oz), la section de ce cône par un plan perpenciculaire à (d) est donc un cercle. (d) est appelée droite génératrice de ce cône.

Idée à exploiter :
Représenter les cercles (parallèles) dont les centres sont des points de l'axe (Oz) ou des génératrices.

On utilisera cette propriété : ces cercles ont des rayons r proportionnels à la hauteur h de leur centre. On prendra ici r=0,5h


Soit M un point de ce cône de révolution d'axe (Oz) généré par la droite (bleue)(d) et situé à la hauteur h du plan (Oxy), le projeter sur le plan (Oxy) parallèlement à (OZ) en H. On notera φ la mesure de l'angle formé entre l'axe (Ox) et (OH), comme pour le paramétrage du cylindre.


En vous inspirant du paramétrage de la sphère et du cylindre, déterminer les coordonnées (x,y,z) de M en fonction de φ et h, dans le repère (O,I,J,K)
Ecrire en python les lignes de code nécessaires pour tracer des cercles permettant de visualiser le cône.
Ecrire en python les lignes de code nécessaires pour tracer des génératrices du cône, c'est à dire des droites comme (d) qui permettent de générer le cône par rotation autour de l'axe (Oz).

En Bonus : les côniques

Les cercles (parallèles) que l'on a construits sont des intersections de plans orthogonaux à l'axe (Oz) et du cône.
Les génératrices s'obtiennent comme intersections de plans contenant l'axe (Oz) et du cône.
On va continuer à couper ce cône par des plans passant par le point A(0,0.5,1)représenté en vert, ainsi l'on pourra construire une ellipse, une hyperbole et une parabole. Ces courbes sont appelées côniques. Remarque : le cercle s'obtient par intersection d'un plan et d'un cône, c'est donc aussi une cônique. Un cercle est aussi une ellipse particulière.




Cas des côniques dégénérées : se produit quand le plan contient le sommet du cône O.

Si l'angle d'inclinaison du plan avec l'axe du cône est nul, c'est à dire si le plan contient (Oz), on obtient une cônique dégénérée constituée de deux génératices.
Si l'angle d'inclinaison du plan avec l'axe du cône est égal à α, l'angle formé entre une génératice et l'axe du cône, on obtient une cônique dégénérée constituée d'une seule génératice.
Si l'angle d'inclinaison du plan avec l'axe du cône est droit (mais pas seulement), on obtient une cônique dégénérée ne contenant que le sommet O.

Pour quelles mesures de l'angle d'inclinaison α du plan passant par O avec l'axe du cône obtient-on encore le seul point O comme intersection ?

Cas des côniques non dégénérées : se produit quand le plan ne contient pas le sommet du cône O.

Discutez le type de cônique non dégénérée obtenue en fonction de l'angle d'inclinaison α d'un plan ne passant pas par O avec l'axe du cône.