Courbe de Hilbert

Courbe de Hilbert
Les 8 premières étapes de la courbe de Hilbert
Courbe de Hilbert, première itération
Courbe de Hilbert, deuxième itération
Courbe de Hilbert, troisième itération
Courbe de Hilbert en trois dimensions.

La courbe de Hilbert est une courbe fractale continue remplissant le plan. Elle a été décrite pour la première fois par le mathématicien allemand David Hilbert en 1891[1]¨.

Comme elle couvre un plan, sa dimension de Hausdorff (à la limite  n \rightarrow \infty ) est 2.
La longueur euclidienne de Hn est  2^n - {1 \over 2^n} , elle croit exponentiellement avec n.

Pour les bases de données multi-dimensionnelles, la courbe de Hilbert a été proposée à la place de la Courbe de Lebesgue (en) parce qu'elle a un comportement préservant mieux la localité.

Sommaire

Démonstration de la surjection du plan

On peut définir la fonction limite simple  f : [0;1] \longrightarrow [0;1]^2 des courbes  f_n : [0;1] \longrightarrow [0;1]^2 définies précédemment.

On montre facilement que cette fonction est en fait limite uniforme des fonctions fn. Cela tient essentiellement à la localité des courbes de Hilbert.

f, en tant que limite uniforme de fonctions continues, est continue.

Comme toute fonction continue, l'image du compact [0;1] par f est un compact. Notamment, c'est un fermé. Par aillleurs, f([0;1]) est dense dans [0;1]2. C'est donc [0;1]2 tout entier.

Representation en L-Système

La courbe de Hilbert peut être construite par un L-système

Alphabet : L, R
Constantes : F, +, −
Axiome : L
Règles:
L → +RF−LFL−FR+
R → −LF+RFR+FL−

Ici, F signifie "avance", + signifie "à gauche 90°", et - signifie "à droite 90°"

Programme

Butz[2] propose un algorithme pour calculer la courbe de Hilbert en plusieurs dimensions.

Le programme Java suivant trace une courbe de Hilbert par quatre méthodes qui s'appellent récursivement :

import java.awt.*;
import java.applet.*;
 
public class HilbertCurve extends Applet {
    private SimpleGraphics sg=null;
    private int dist0=512, dist=dist0;
 
    public void init() {
        dist0 = 512;
        resize ( dist0, dist0 );
        sg = new SimpleGraphics(getGraphics());
    }
 
    public void paint(Graphics g) {
        int level=4;
        dist=dist0;
        for (int i=level;i>0;i--) dist /= 2;
        sg.goToXY ( dist/2, dist/2 );
        HilbertU(level); // start recursion
    }
 
    // Trace courbe "U" à cette échelle:
    private void HilbertU(int level) {
        if (level > 0) {
            HilbertD(level-1);    sg.lineRel(0,dist);
            HilbertU(level-1);    sg.lineRel(dist,0);
            HilbertU(level-1);    sg.lineRel(0,-dist);
            HilbertC(level-1);
        }
    }
 
    // Trace courbe "]" à cette échelle:
    private void HilbertD(int level) {
        if (level > 0) {
            HilbertU(level-1);    sg.lineRel(dist,0);
            HilbertD(level-1);    sg.lineRel(0,dist);
            HilbertD(level-1);    sg.lineRel(-dist,0);
            HilbertA(level-1);
        }
    }
 
    // Trace courbe "[" à cette échelle:
    private void HilbertC (int level) {
        if (level > 0) {
            HilbertA(level-1);    sg.lineRel(-dist,0);
            HilbertC(level-1);    sg.lineRel(0,-dist);
            HilbertC(level-1);    sg.lineRel(dist,0);
            HilbertU(level-1);
        }
    }
 
    // Trace courbe "⊓" à cette échelle:
    private void HilbertA (int level) {
        if (level > 0) {
            HilbertC(level-1);    sg.lineRel(0,-dist);
            HilbertA(level-1);    sg.lineRel(-dist,0);
            HilbertA(level-1);    sg.lineRel(0,dist);
            HilbertD(level-1);
        }
    }
}
 
class SimpleGraphics {
    private Graphics g = null;
    private int x = 0, y = 0;    
 
    public SimpleGraphics(Graphics g) { this.g = g; }
    public void goToXY(int x, int y) { this.x = x;   this.y = y; }
 
    public void lineRel(int deltaX, int deltaY) {
        g.drawLine ( x, y, x+deltaX, y+deltaY );
        x += deltaX;    y += deltaY;
    }
}

Et voici une autre version qui met en œuvre les règles du L-système :

 def f
   walk 10
 end
 def p
   turn 90
 end
 def m
   turn -90
 end
 def l(n)
   return if n==0
   p; r(n-1); f; m; l(n-1); f; l(n-1); m; f; r(n-1); p
 end
 def r(n)
   return if n==0
   m; l(n-1); f; p; r(n-1); f; r(n-1); p; f; l(n-1); m
 end
 
 l(6)

Références

  1. (de) D. Hilbert, « Über die stetige Abbildung einer Linie auf ein Flächenstück », dans Math. Ann., vol. 38, 1891, p. 459-460 [texte intégral] 
  2. (en) Arthur Butz (en), « Alternative algorithm for Hilbert’s space filling curve », IEEE Trans. On Computers, 20, p.424-442, avril 1971.

Voir aussi

Sur les autres projets Wikimedia :

Articles connexes

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Courbe de Hilbert de Wikipédia en français (auteurs)

Игры ⚽ Нужно решить контрольную?

Regardez d'autres dictionnaires:

  • Courbe De Peano — Quatre itérations de la courbe de Peano Une courbe de Peano est une fonction continue sur l intervalle [0, 1], surjective dans le carré [0, 1] x [0, 1], c est à dire que la courbe passe par chaque point du carré. Elle est une fractale : bien …   Wikipédia en Français

  • Courbe de Péano — Courbe de Peano Quatre itérations de la courbe de Peano Une courbe de Peano est une fonction continue sur l intervalle [0, 1], surjective dans le carré [0, 1] x [0, 1], c est à dire que la courbe passe par chaque point du carré. Elle est une… …   Wikipédia en Français

  • Courbe de peano — Quatre itérations de la courbe de Peano Une courbe de Peano est une fonction continue sur l intervalle [0, 1], surjective dans le carré [0, 1] x [0, 1], c est à dire que la courbe passe par chaque point du carré. Elle est une fractale : bien …   Wikipédia en Français

  • Courbe de Gosper — à la 4ème itération La Courbe de Gosper, baptisée d après son découvreur Bill Gosper, est une courbe de Peano remplissant le plan. Il s agit d une courbe fractale, voisine, dans sa construction, à la courbe du dragon ou la courbe de Hilbert …   Wikipédia en Français

  • Courbe de Peano — Giuseppe Peano Une courbe de Peano est une courbe plane paramétrée par une fonction continue sur l intervalle unité [0, 1], surjective dans le carré [0, 1]×[0, 1], c est à dire que la courbe passe par chaque point du carré : elle… …   Wikipédia en Français

  • HILBERT (PROBLÈMES DE) — «Qui ne se réjouirait de pouvoir soulever le voile qui cache le futur, de jeter un regard sur le développement des mathématiques, ses progrès ultérieurs, les secrets des découvertes des siècles à venir?...» Prévoir le futur des mathématiques: qui …   Encyclopédie Universelle

  • Courbe algébrique — En mathématiques, et plus précisément en géométrie algébrique, une courbe algébrique est une variété algébrique (ou un schéma de type fini) sur un corps, dont les composantes irréductibles sont de dimension 1. Cette définition est la… …   Wikipédia en Français

  • Problèmes de Hilbert — Lors du deuxième congrès international des mathématiciens tenu à Paris en 1900, David Hilbert présenta une liste de problèmes qui tenaient jusqu alors les mathématiciens en échec. Ces problèmes devaient, selon Hilbert, marquer le cours des… …   Wikipédia en Français

  • Problemes de Hilbert — Problèmes de Hilbert Lors du deuxième congrès international de mathématiques tenu à Paris en 1900, David Hilbert présenta une liste de problèmes qui tenaient jusqu alors les mathématiciens en échec. Ces problèmes devaient, selon Hilbert, marquer… …   Wikipédia en Français

  • Problèmes de hilbert — Lors du deuxième congrès international de mathématiques tenu à Paris en 1900, David Hilbert présenta une liste de problèmes qui tenaient jusqu alors les mathématiciens en échec. Ces problèmes devaient, selon Hilbert, marquer le cours des… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”