Dessinez le disque de Poancare en Python

Je me suis demandé si c'était sur le net, mais je ne l'ai pas trouvé, alors je vais l'écrire moi-même.

Quel est le disque de Poancare?

C'est célèbre pour le truc d'Escher.

Comme l'explication sera désormais longue, celle implémentée en Python et le code source sont les suivants.

image.png

import numpy as np
import matplotlib.pyplot as plt

theta = np.linspace(0,2*np.pi,100)
colorlist = ["r","g","b","c","m","y"]

t = list(range(0,6))
for n in t:
    n2 = np.power(2,n)
    for phi in np.linspace(0,2*np.pi,2*n2+1):
        x = np.cos(theta)*np.tan(np.pi/n2) + np.cos(phi)/np.cos(np.pi/n2)
        y = np.sin(theta)*np.tan(np.pi/n2) + np.sin(phi)/np.cos(np.pi/n2)
        plt.plot(x,y,lw=0.5,color=colorlist[n-2])

for phi in np.linspace(0,2*np.pi,9):
    t = np.linspace(-2,2,100)
    x = t*np.cos(phi)
    y = t*np.sin(phi)
    plt.plot(x,y,lw=0.5,color='y')

plt.plot(np.cos(theta),np.sin(theta),color='black')
plt.xlim(-1,1)
plt.ylim(-1,1)
plt.show()

On dit qu'il s'agit d'un espace à double courbure en expansion infinie confiné dans un disque, mais cela seul ne suffit pas à expliquer, et c'est le miso qui a confiné «l'espace à double courbure» au lieu de «l'espace plat». Je pense que c'est.

Espace twin

Un espace à double courbe est un espace dans lequel une ligne droite ressemble à une double courbe. En premier lieu, ce n'est pas parce que l'espace que vous voyez devant vous est droit qu'il le restera pour toujours. Même la terre est ronde. Puisque toutes les lignes droites à la surface de la Terre sont des cercles parfaits (correctement, des ellipses rotatives) lorsqu'elles sont vues à l'échelle planétaire, on peut dire que la Terre est un espace où toutes les lignes droites sont des cercles. Au contraire, il devrait y avoir un espace où toutes les lignes droites sont à double courbure. Le tableau est le suivant.

Type d'espace Somme des angles intérieurs du triangle Lignes droites non parallèles Lignes droites parallèles*
Sphérique > 180 degrés Intersection en 2 points Ne pas croiser
Avion =180 degrés Intersection en un point Ne pas croiser
Surface bicourbée <180 degrés Intersection en un point ou non intersection Ne pas croiser

Considérant un espace où la grille sur le plan euclidien (coordonnées du réseau) est une bicourbe, les conditions suivantes sont satisfaites. Le transfert aux coordonnées euclidiennes est le suivant.

image.png

Vous pouvez voir que le carré près du bord est clairement net. Cela reflète toujours correctement l'angle, mais il est difficile de voir l'image entière, alors disons que vous la compressez ** de force ** sur un disque. Définissons $ = 1 $ à l'infini.

Plan euclidien $ U $ → Projection verticale sur une surface bi-courbe $ H $ → Projection centrale à l'origine

Cette compression peut se faire assez naturellement par la procédure. La formule peut également être calculée avec une simple similitude. Soit le système de coordonnées converti $ D $.

U:[x_U,y_U] \longmapsto H:[x_H,y_H,z_H]\\
x_H = x_U\\
y_H = y_U\\
z_H = \sqrt{x_U^{2}+y_U^{2}+1}\\
H:[x_H,y_H,z_H] \longmapsto D:[x_D,y_D,1]\\
x_D = \frac{x_H}{z_H}\\
y_D = \frac{y_H}{z_H}\\

Le résultat est:

image.png

Facile à voir! Un tel modèle est appelé ** disque de Klein **. Cela relie les lignes d'abduction de la bicourbe et l'intersection de l'infini avec une ligne droite, et bien que la relation de position dans un sens euclidien soit facile à comprendre, elle présente l'inconvénient de ne pas refléter avec précision l'angle de chaque ligne droite (à l'origine 90). Les endroits où ils se rencontrent sous le degré regardent également à angle droit).

Par conséquent, cette fois, nous allons effectuer l'opération de compression en disque tout en maintenant l'angle entre les lignes droites. Le résultat est ce qu'on appelle un ** disque Poancare **, et le fonctionnement est le suivant.

D:[x_D,y_D,1] \longmapsto P:[x_P,y_P,0]\\
x_P = \frac{x_D}{1+\sqrt{1-x_D^{2}-y_D^{2}}}\\
y_P = \frac{y_D}{1+\sqrt{1-x_D^{2}-y_D^{2}}}\\

Le résultat est: image.png

Vous pouvez voir que l'intersection de chaque ligne droite et de l'infini (circonférence) est un angle droit, et que l'angle entre les lignes droites est gardé le même que celui des coordonnées euclidiennes.

Application à autre que la grille

Jusqu'à présent, pour l'explication de l'espace musical jumeau, la grille (les courbes jumelles disposées comme) était convertie telle quelle, mais je vais essayer de convertir d'autres choses également. Considérez l'ensemble de bicurves suivant.

image.png

Soudain, c'est devenu psychédélique, mais calmez-vous car toutes les lignes sont des courbes doubles.

Conversion de ce disque sur le disque de Klein

image.png

Une fois converti en un disque de Poancare,

image.png

Ce sera comme ça. De cette façon, la première figure a été dessinée.

Notez que sur toutes ces figures, les relations de phase telles que le nombre de côtés et la relation positionnelle ** de la figure entourée par chaque ligne droite n'ont pas changé.

Supplément

Dans le code source au début, le disque de Poancare est réalisé en dessinant un cercle sans passer par le calcul compliqué comme ci-dessus. Bien sûr, en appliquant la transformation ci-dessus à la bicourbe, elle deviendra éventuellement un cercle et vous pourrez créer un disque Poancare.

Recommended Posts

Dessinez le disque de Poancare en Python
Dessiner un graphique avec python
Dessiner une forme d'onde mp3 en Python
Dessiner "Dessiner une fougère par programme" en Python
Dessiner la fonction Yin en python
Dessinez un cœur en Python
Dessinez des ondes sinusoïdales avec Blender Python
Dessinez des nœuds de manière interactive avec Plotly (Python)
Dessinez un diagramme CNN en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Dessinez Nozomi Sasaki dans Excel avec python
Époque en Python
Discord en Python
Dessiner un cœur avec Python Partie 2 (SymPy Edition)
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Dessiner un graphique d'une fonction quadratique en Python
Dessiner des lignes de contour qui apparaissent dans les manuels (Python)
Dessinez des graphiques dans Julia ... Laissez les graphiques à Python
[Python] Comment dessiner un histogramme avec Matplotlib
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python