Hilbertin käyrä (tunnetaan myös nimellä tilan täyttävä Hilbertin käyrä ) on jatkuva fraktaalitilan täyttökäyrä , jonka saksalainen matemaatikko David Hilbert kuvasi ensimmäisen kerran vuonna 1891 [1] muunnelmana tilan täyttävistä Peano-käyristä , jotka on löydetty. Italialainen matemaatikko Giuseppe Peano vuonna 1890 [2] .
Koska käyrä täyttää tason, sen Hausdorff-mitta on (täsmälleen, sen kuva on yksikköneliö, jonka mitta on 2 missä tahansa mittamääritelmässä, ja sen kuvaaja on kompakti joukko, joka on homeomorfinen suljetun yksikkövälin kanssa Hausdorffin mittasuhteella 2).
on rajakäyrän th approksimaatio. Käyrän euklidinen pituus on , eli se kasvaa eksponentiaalisesti kohdasta , samalla kun se on aina rajallisen alueen sisällä.
Hilbertin käyrä, ensimmäinen askel
Hilbertin käyrät, ensimmäinen ja toinen askel
Hilbert käyriä ensimmäisestä kolmanteen askeleeseen
Säikeen grafiikka
Värillinen Hilbert-käyrä
3D Hilbertin käyrä
3D Hilbertin käyrä värinä osoittavassa järjestyksessä
Animoitu kuva, joka esittää ympyröiden kulkemista käyrää pitkin.
Sekä todellinen Hilbertin käyrä että sen diskreetti approksimaatio antavat kartoituksen yksi- ja kaksiulotteisista avaruksista, jotka säilyttävät paikalliset ominaisuudet melko hyvin [3] . Jos merkitsemme ( x , y ) yksikköneliön pisteen koordinaatit ja d : llä etäisyyttä käyrällä, jolla tämä piste saavutetaan, niin pisteillä, joiden arvot ovat lähellä d :tä , on myös läheisiä arvoja . kohteeseen ( x , y ). Päinvastoin ei aina pidä paikkaansa - joillakin pisteillä, joilla on läheiset koordinaatit ( x , y ), on melko suuri ero etäisyydellä d .
Tämän paikkakunnan ominaisuuden vuoksi Hilbertin käyrä on laajalti käytössä tietokoneohjelmissa. Esimerkiksi tietokoneille osoitettujen IP-osoitteiden alue voidaan piirtää käyttämällä Hilbert-käyrää. Ohjelma tällaisen esityksen luomiseksi pisteiden värin määrittämiseksi voi muuntaa kuvan kaksiulotteisesta yksiulotteiseksi, ja Hilbertin käyrää käytetään joskus tämän käyrän paikallisuusominaisuuden vuoksi, koska sen avulla voit pysyä lähellä IP-osoitteet sulkeutuvat yksiulotteisessa esityksessä. Mustavalkoinen valokuva voidaan häivyttää käyttämällä vähemmän harmaasävyjä siirtämällä jäännöskirkkausarvo seuraavaan pisteeseen Hilbertin käyrällä. Hilbertin käyrää käytetään tässä tapauksessa, koska se ei luo näkyviä kirkkauden siirtymiä, jotka syntyvät progressiivisella muunnolla. Korkeampiulotteiset Hilbert-käyrät ovat Gray-koodien yleistyksiä, ja niitä käytetään joskus samanlaisissa tilanteissa samanlaisiin tarkoituksiin. Moniulotteisissa tietokannoissa on suositeltavaa käyttää Hilbertin järjestystä Z-järjestyksen sijaan , koska se antaa paremman paikkakunnan säilymisen. Esimerkiksi Hilbertin käyriä on käytetty R-puun indeksien pakkaamiseen ja nopeuttamiseen [4] . Hilbertin käyriä on käytetty myös tietokantojen pakkaamiseen [5] [6] .
On hyödyllistä käyttää algoritmia, joka mahdollistaa muuntamisen molempiin suuntiin (sekä ( x , y ) arvoon d että d :stä ( x , y )). Monissa ohjelmointikielissä iterointi on suositeltavampi kuin rekursio. Seuraava C -ohjelma kartoittaa molempiin suuntiin käyttämällä iteraatiota ja bittitoimintoja rekursion sijaan. Ohjelmassa neliö jaetaan n x n soluun (neliöt, joiden sivu on 1), missä n on kahden potenssi. Koordinaatit (0,0) kuuluvat vasempaan alakulmaan ja ( n -1, n -1) kuuluvat oikeaan yläkulmaan. Etäisyys d mitataan vasemmasta alakulmasta (etäisyys 0) ja kasvaa oikeaan alakulmaan.
//Muunna (x,y) muotoon d int xy2d ( int n , int x , int y ) { int rx , ry , s , d = 0 ; for ( s = n / 2 ; s > 0 ; s / = 2 ) { rx = ( x & s ) > 0 ; ry = ( y & s ) > 0 ; d += s * s * (( 3 * rx ) ^ ry ); rot ( s , & x , & y , rx , ry ); } paluu d ; } //Muunna d muotoon (x,y) void d2xy ( int n , int d , int * x , int * y ) { int rx , ry , s , t = d ; * x = * y = 0 ; for ( s = 1 ; s < n ; s * = 2 ) { rx = 1 & ( t / 2 ); ry = 1 & ( t ^ rx ); rot ( s , x , y , rx , ry ); * x += s * rx ; * y += s * ry ; t /= 4 ; } } // pyöritä /heijasta neljännestä void rot ( int n , int * x , int * y , int rx , intry ) { if ( ry == 0 ) { if ( rx == 1 ) { * x = n - 1 - * x ; * y = n - 1- * y ; } // Vaihda x ja y int t = * x ; * x = * y ; * y = t ; } }Ohjelma käyttää C -kielen käytäntöjä: &-merkki tarkoittaa bittikohtaista AND-operaatiota (AND), ^-merkki bittikohtaista XOR-toimintoa (OR), +=-merkki tarkoittaa muuttujan summausoperaattoria ja /=-merkki tarkoittaa muuttuva jakotoiminto.
Xy2d-funktio toimii ylhäältä alas alkaen x :n ja y :n korkeista biteista ja alkaa rakentaa d :tä korkeista biteistä. Funktio d2xy toimii päinvastaiseen suuntaan, alkaen d :n alhaisista biteistä ja rakentaen x :n ja y :n alhaisista biteistä. Molemmat funktiot käyttävät koordinaattijärjestelmän ( x , y ) kierto- ja heijastusfunktiota.
Molemmat algoritmit toimivat samalla tavalla. Koko neliö katsotaan alueeksi 4 2 x 2. Jokainen alue koostuu 4 pienemmästä alueesta ja niin edelleen viimeiseen tasoon asti. Tasolla s jokaisella alueella on s x s solua. Tasojen läpi kulkee yksi FOR-silmukka. Jokaisessa iteraatiossa d :hen tai x :ään ja y : ään lisätään arvo , jonka määrää alue (neljästä), jolla olemme tällä tasolla. Alueet annetaan parilla ( rx , ry ), jossa rx ja ry saavat arvon 0 tai 1. Siten alue määritellään 2 tulobitillä (joko kaksi bittiä d :stä tai bitti x :stä ja y :stä ) ja ne muodostavat kaksi lähtöbittiä. Kiertofunktiota kutsutaan myös, jotta ( x , y ) voidaan käyttää seuraavalla tasolla seuraavassa iteraatiossa. Kun kyseessä on xy2d, se alkaa koko neliön ylätasolta ja siirtyy alaspäin yksittäisiin soluihin asti. Kun kyseessä on d2xy, prosessi alkaa solujen alaosasta ja etenee täysneliöön.
Hilbertin käyrät voidaan toteuttaa tehokkaasti, vaikka alue ei muodosta neliötä [7] . Lisäksi Hilbertin käyristä on olemassa joitain yleistyksiä suurempia ulottuvuuksia varten [8] [9] .
Hilbert-käyrän luominen voidaan kirjoittaa uudelleen L-järjestelmää varten .
Aakkoset : A, B Vakiot : F + − Aksiooma : A Säännöt : A→−BF+AFA+FB− B → + AF − BFB − FA +Tässä F tarkoittaa "mennä eteenpäin", "−" tarkoittaa käännöstä vasemmalle 90° , "+" tarkoittaa käännöstä oikealle 90° (katso kilpikonnagrafiikka ), ja A ja B ohitetaan piirrettäessä.
Arthur Butz [10] antoi algoritmin Hilbertin käyrän laskemiseen moniulotteisissa tiloissa.
Kirja Graphics Gems II [11] käsittelee Hilbertin käyrää ja tarjoaa toteutuksen.
Hilbertin käyrän perusteella voidaan toteuttaa vibraattori- tai painettuja antennimalleja [12] .
Käyrät | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Määritelmät | |||||||||||||||||||
Muuntunut | |||||||||||||||||||
Ei-tasomainen | |||||||||||||||||||
Litteä algebrallinen |
| ||||||||||||||||||
Tasainen transsendenttinen |
| ||||||||||||||||||
fraktaali |
|