Sierpiński Oppervlaktevullende Coördinaat

door Louis Strous. Gepubliceerd op 10 juli 2015.

1. Ruimtevullende krommen ... 2. Sierpińskidriehoeken en Sierpińskicoördinaten ... 3. Sierpińskicoördinaat op een bol ... 3.1. Binaire coördinaten ... 3.2. Octale coördinaten, niveaustaart ... 3.3. Hexadecimale coördinaten ... 3.4. Decimale coördinaten ... 3.5. Index ... 3.6. Relatieve coördinaat ... 3.7. Interval ... 3.8. Samenvatting ... 4. Inzoomen naar het Natuurhistorisch Museum te Rotterdam ... 5. Omrekenen van Sierpińskicoördinaat naar lengtegraad en breedtegraad ... 5.1. Omrekenen van Sierpińskicoördinaat naar binaire Sierpińskicoördinaat ... 5.1.1. Omrekenen van octale naar binaire Sierpińskicoördinaat ... 5.1.2. Omrekenen van hexadecimale naar binaire Sierpińskicoördinaat ... 5.1.3. Omrekenen van Sierpiński-index naar binaire Sierpińskicoördinaat ... 5.1.4. Omrekenen van decimale naar binaire Sierpińskicoördinaat ... 5.2. Omrekenen van binaire Sierpińskicoördinaat naar lengtegraad en breedtegraad ... 6. Omrekenen van lengtegraad en breedtegraad naar Sierpińskicoördinaat ... 6.1. Omrekenen van binaire Sierpińskicoördinaat naar andere Sierpińskicoördinaten ... 6.1.1. Omrekenen van binair naar hexadecimale Sierpińskicoördinaat ... 6.1.2. Omrekenen van binaire Sierpińskicoördinaat naar Sierpiński-index ... 6.1.3. Omrekenen van een binaire naar een decimale Sierpińskicoördinaat ... 6.2. Omrekenen van lengtegraad en breedtegraad naar binaire Sierpińskicoördinaat

We zijn gewend om posities op Aarde (of op andere planeten of manen, of aan de sterrenhemel) aan te geven met twee coördinaten: een lengtegraad en een breedtegraad. Je moet eerst de ene tot de gewenste nauwkeurigheid opgeven, en daarna de andere. Tot je ze allebei hebt kun je er niet zoveel mee.

Hieronder laat ik zien dat je een positie op Aarde ook kunt aangeven met één coördinaat. Die coördinaat duidt altijd een compact gebied aan dat in alle horizontale richtingen ongeveer even groot is. Hoe meer cijfers je krijgt van dat coördinaat, hoe kleiner het gebied wordt waarin de plek kan liggen, maar het blijft compact.

De achterliggende ideeën komen uit het artikel "Continuous Indexing of Hierarchical Subdivisions of the Globe" uit 2000 door John J. Bartholdi Ⅲ en Paul Goldsman, te vinden op http://www2.isye.gatech.edu/~jjb/mow/papers/hglobec.pdf.

1. Ruimtevullende krommen

Een ruimtevullende kromme is een kromme die ongeveer even dicht langs alle plaatsen in een ruimte gaat. Zo'n kromme heeft een resolutie, wat een maat is voor hoe dicht alle plaatsen gemiddeld bij die kromme zijn. In de limiet van oneindige resolutie bezoekt de kromme alle punten in de ruimte.

Zo'n kromme kan worden gebruikt om een coördinaatsysteem in de ruimte te definiëren waarbij slechts één coördinaat nodig is om een plaats aan te geven, zelfs als de ruimte een oppervlak of volume is waarvoor meestal twee of drie coördinaten nodig zijn. De enkele coördinaat is gelijk aan de fractie van de lengte van de gehele kromme die moet worden afgelegd om zo dicht mogelijk bij die plaats te komen. Die fractie komt steeds dichter bij een vaste waarde als de resolutie steeds groter wordt.

Ruimtevullende krommen worden meestal gemaakt van een sjabloonkromme die bestaat uit een klein aantal redelijk gelijkmatig verdeelde punten verbonden door rechte lijnen. De kromme mag zichzelf niet kruisen. Je krijgt de ruimtevullende kromme door kopieën van de sjabloonkromme op de juiste manier te schalen en te draaien en dan aan elkaar te koppelen.

Elk van de punten is het centrum van een deel van de ruimte waarvoor dat punt het meest nabije punt van de kromme is, voor een toepasselijke definitie van "meest nabij". We noemen dat deel van de ruimte het puntgerelateerde gebied. De puntgerelateerde gebieden vullen samen de hele ruimte, zonder gaten en zonder overlap.

De sjabloonkromme definieert de ruimtevullende kromme op niveau 1. Om het volgende niveau van de kromme te vinden wordt elk van de lijnstukken uit de kromme vervangen door een toepasselijk geschaalde en gedraaide kopie van de sjabloonkromme, op zo'n manier dat de kromme als geheel verbonden blijft en zichzelf niet kruist. Dit komt overeen met het onderverdelen van elk puntgerelateerd gebied.

Eigenlijk is het voor ons doel beter om de gebieden de leiding te geven over de punten. Om het volgende niveau te bereiken verdeel je de puntgerelateerde gebieden in delen op zo'n manier dat er een ruimtevullende kromme doorheen getrokken kan worden met één punt in elk deelgebied.

Het vervangen van steeds kleinere onderdelen door kopieën van steeds hetzelfde sjabloon maakt de ruimtevullende kromme zelfgelijkvormig. Op oneindige resolutie is zo'n ruimtevullende kromme een fractal.

2. Sierpińskidriehoeken en Sierpińskicoördinaten

De Sierpińskikrommen zijn een bepaalde familie van ruimtevullende krommen. Zij vormen de basis voor een coördinaatsysteem op het oppervlak van een bol (zoals de Aarde), die ik Sierpińskicoördinaten noem. De puntgerelateerde gebieden zijn boldriehoeken, en naar het volgende niveau gaan betekent elke boldriehoek in twee kleinere boldriehoeken verdelen. Elk volgend niveau heeft tweemaal zoveel boldriehoeken.

Als een voorbeeld kijken we naar een bepaalde Sierpińskidriehoek op niveau 18 op Aarde die een deel van Nederland omvat.

Op het volgende niveau (niveau 19) is die driehoek verdeeld in twee bijna gelijke delen.

En op niveau 20 is elk van de kleinere driehoeken zelf weer in tweeën verdeeld.

En net zo op niveau 21.

De Sierpińskikromme door de driehoeken op niveau 21 binnenin de driehoek op niveau 18 staat in het plaatje hieronder. We komen de niveau-18-driehoek links binnen, gaan door de niveau-21-driehoeken in de volgorde aangegeven door de Sierpińskikromme, en verlaten de niveau-18-driehoek rechts onderin. Dit is het algemene patroon voor elke driehoek: ga hem binnen bij het beginhoekpunt, ga door de hele inhoud, en halverwege langs het mediaanhoekpunt, en verlaat hem door het eindhoekpunt. Het eindhoekpunt van de vorige driehoek is het beginhoekpunt van de volgende driehoek.

We kunnen door blijven gaan naar hogere niveaus en grotere resolutie. Hier zijn de niveau-24-driehoeken in de niveau-18-driehoek en de Sierpińskikromme door hen heen.

Op niveau 27 worden de driehoeken op deze schaal erg klein.

dus laten we de bijbehorende Sierpińskikromme los zien. De kromme komt nog steeds de niveau-18-driehoek links binnen, gaat dicht langs elke plek in die driehoek zonder zichzelf te kruisen, en verlaat de driehoek dan rechts onderin.

3. Sierpińskicoördinaat op een bol

Het oppervlak van een bol is geen driehoek, dus op de eerste paar niveaus zijn de Sierpińskigebieden geen boldriehoeken maar bolsegmenten. Voor het gemak noem ik ze allemaal boldriehoeken.

Op niveau 1 is de bol verdeeld in een oostelijk halfrond en een westelijk halfrond. Op niveau 2 is elk halfrond van pool tot pool in twee segmenten verdeeld. Op niveau 3 is elk van de segmenten bij de evenaar in tweeën gedeeld. De 8 gebieden waarin het oppervlak van de bol dan verdeeld is zijn boldriehoeken. Op hogere niveaus wordt elke boldriehoek verder verdeeld volgens de Sierpińskikromme.

Deze driehoeken worden in het groen getoond op de volgende kaart van de Aarde (in Mollweideprojectie). Het nummer in het midden van elke driehoek is de decimale Sierpińskicoördinaat van de driehoek. Die coördinaat wordt later uitgelegd. (Ik maakte deze kaart met behulp van QGIS, met kaartdata van Natural Earth.)

De volgende tabel toont voor de eerste 50 niveaus \(n\): ongeveer de gemiddelde oppervlakte \(A\) van een driehoek op dat niveau op Aarde, ongeveer de hoekstraal \(ρ\) van de ingeschreven cirkel in de driehoek en ongeveer de straal \(L\) van de ingeschreven cirkel. De eenheden zijn: 1 Mm² = 1 miljoen km², 1° = 60′, 1′ = 60″, 1 Mm = 1000 km, 1 km = 1000 m, 1 m = 1000 mm.

\(n\) \(A\) \(ρ\) \(L\)
1 511 Mm² 90.0° 10 Mm
2 256 Mm² 63.6° 7.1 Mm
3 128 Mm² 45.0° 5.0 Mm
4 63.9 Mm² 31.8° 3.5 Mm
5 31.9 Mm² 22.5° 2.5 Mm
6 16.0 Mm² 15.9° 1.8 Mm
7 7.99 Mm² 11.3° 1.3 Mm
8 3.99 Mm² 7.95° 890 km
9 2.00 Mm² 5.63° 630 km
10 0.998 Mm² 3.98° 440 km
11 0.499 Mm² 2.81° 310 km
12 0.250 Mm² 1.99° 220 km
13 0.125 Mm² 1.41° 160 km
14 62400 km² 59.7′ 110 km
15 31200 km² 42.2′ 78 km
16 15600 km² 29.8′ 55 km
17 7800 km² 21.1′ 39 km
18 3900 km² 14.9′ 28 km
19 1950 km² 10.5′ 20 km
20 975 km² 7.46′ 14 km
21 488 km² 5.27′ 9.8 km
22 244 km² 3.73′ 6.9 km
23 122 km² 2.64′ 4.9 km
24 60.9 km² 1.86′ 3.5 km
25 30.5 km² 1.32′ 2.4 km
26 15.2 km² 55.9″ 1.7 km
27 7.62 km² 39.6″ 1.2 km
28 3.81 km² 28.0″ 860 m
29 1.90 km² 19.8″ 610 m
30 0.950 km² 14.0″ 430 m
31 0.476 km² 9.89″ 310 m
32 0.238 km² 6.99″ 220 m
33 0.119 km² 4.94″ 150 m
34 59500 m² 3.50″ 110 m
35 29800 m² 2.47″ 76 m
36 14900 m² 1.75″ 54 m
37 7440 m² 1.24″ 38 m
38 3720 m² 0.87″ 27 m
39 1860 m² 0.62″ 19 m
40 930 m² 0.44″ 14 m
41 465 m² 0.31″ 9.6 m
42 232 m² 0.22″ 6.8 m
43 116 m² 0.15″ 4.8 m
44 58.1 m² 0.11″ 3.4 m
45 29.1 m² 0.08″ 2.4 m
46 14.5 m² 0.05″ 1.7 m
47 7.26 m² 0.04″ 1.2 m
48 3.63 m² 0.03″ 840 mm
49 1.82 m² 0.02″ 600 mm
50 0.908 m² 0.01″ 420 mm

Dus op niveau 30 heeft elke driehoek een oppervlakte van ongeveer 1 km2, en op niveau 40 heeft elke driehoek een oppervlak van ongeveer 930 m2 (hetzelfde als van een cirkel met een straal van 8,6 m).

3.1. Binaire coördinaten

De Sierpińskicoördinaat reikt van 0 (op de Noordpool) tot 1 (terug bij de Noordpool). Als je de driehoeken doorloopt in de volgorde van de coördinaat, dan ga je over de hele wereld, zonder gaten en zonder overlap, tot je weer terug bent bij de eerste driehoek. Driehoeken met nabije coördinaten zijn meestal ook dichtbij elkaar op de wereld. Een interval van de Sierpińskicoördinaat komt overeen met een aaneengesloten gebied op de wereld.

Sierpińskicoördinaten worden het meest precies gespecificeerd met binaire getallen, want op elk niveau verdubbelt het aantal driehoeken.

Om in de rest van deze tekst binaire getallen te onderscheiden van getallen gebaseerd op andere grondtallen (bijvoorbeel decimale) kunnen we niet-decimale getallen noteren met aan het begin het grondtal gevolgd door een hekje "#", bijvoorbeeld "2#" voor binaire getallen. Als het grondtal duidelijk is uit de omringende tekst dan kan dit voorstuk weggelaten worden.

Op niveau 1 zijn de gebieden

Index Binair Gebied
0 2#0.0 oostelijk halfrond
1 2#0.1 westelijk halfrond

Elke plaats met een binaire Sierpińskicoördinaat die (na de komma) begint met 0 is in het oostelijke halfrond, en elke plaats met een binaire Sierpińskicoördinaat die (na de komma) begint met 1 is in het westelijke halfrond.

Op niveau 2 zijn de gebieden

Index Binair Gebied
0 2#0.00 0° tot 90° oostelijke lengtegraad
1 2#0.01 90° tot 180° oostelijke lengtegraad
2 2#0.10 180° tot 90° westelijke lengtegraad
3 2#0.11 90° tot 0° westelijke lengtegraad

Op niveau 3 zijn de boldriehoeken

Index Binair Gebied
0 2#0.000 0−90° oostelijke lengtegraad, noorderbreedte
1 2#0.001 0−90° oostelijke lengtegraad, zuiderbreedte
2 2#0.010 90−180° oostelijke lengtegraad, zuiderbreedte
3 2#0.011 90−180° oostelijke lengtegraad, noorderbreedte
4 2#0.100 180−90° westelijke lengtegraad, noorderbreedte
5 2#0.101 180−90° westelijke lengtegraad, zuiderbreedte
6 2#0.110 90−0° westelijke lengtegraad, zuiderbreedte
7 2#0.111 90−0° westelijke lengtegraad, noorderbreedte

Mijn standaardnotatie voor een binaire Sierpińskicoördinaat is om de komma en alles ervoor weg te laten, en om een "b" ervoor te plakken om zijn binaire aard aan te geven. Dus, Australië (nabij 140° oosterlengte en 35° zuiderbreedte) ligt in de driehoek aangeduid als b101. Duitsland (nabij 10° oosterlengte en 50° noorderbreedte) ligt in Sierpińskidriehoek b000. Chili (nabij 70° westerlengte in het zuidelijke halfrond) ligt in driehoek b110.

Nullen vooraan en achteraan hebben betekenis! Driehoek b1 is niet hetzelfde als driehoek b01 of driehoek b10. Hoe meer cijfers er zijn, hoe kleiner de driehoek is.

Als een naamruimte aangegeven moet worden, gebruik dan "ssfc:" voor "Sierpiński surface-filling coordinate". Dus, ssfc:b110 is een volledige aanduiding van de niveau-3-driehoek die Chili bevat.

Voor binaire Sierpińskicoördinaten is het voorste stuk van de coördinaat van een kleinere driehoek gelijk aan de coördinaat van een grotere driehoek waar die kleinere driehoek deel van is. Dus driehoek b11011001 zit in grotere driehoek b1101100 die zelf weer in nog grotere driehoek b110110 zit.

3.2. Octale coördinaten, niveaustaart

Sierpińskicoördinaten in binair formaat zijn nogal onhandig, want ze worden al snel heel lang. Een Sierpińskicoördinaat met 30 binaire cijfers duidt op Aarde een driehoek van ongeveer 1 km², wat nog best groot is. Voor een driehoek van ongeveer 1 m² heb je 50 binaire cijfers nodig. Bijvoorbeeld, de binaire Sierpińskicoördinaat van de niveau-30-driehoek van ongeveer 1 km² waarin het Natuurhistorisch Museum te Rotterdam ligt is b000001111010001010001000111111.

Voor meer gemak kunnen binaire Sierpińskicoördinaten worden vertaald naar octaal (grondtal 8), decimaal (grondtal 10) of hexadecimaal (grondtal 16).

Elke volgende groep van 3 binaire cijfers komt overeen met 1 octaal cijfer (0−7). De overeenkomst is als volgt.

Binair 000 001 010 011 100 101 110 111
Octaal 0 1 2 3 4 5 6 7

Een octale Sierpińskicoördinaat heeft een "o" aan het begin. Australië ligt in b101 = o5, de Benelux in b000 = o0, en Chili in b110 = o6. De vierkante kilometer op niveau 30 waarin het Natuurhistorisch Museum Rotterdam ligt heet o0172121077.

Een octale coördinaat heeft ongeveer een derde zoveel cijfers nodig als de overeenkomstige binaire coördinaat.

Er is een probleem met octale Sierpińskicoördinaten (en ook met coördinaten op elk ander grondtal dan 2). Wat is de octale versie van b10? Die binaire coördinaat heeft twee binaire cijfers, maar elk octale cijfer komt overeen met drie binaire cijfers. b10 staat voor het binaire getal 2#0.10 (= 1/2), dat overeenkomt met het octale getal 8#0.4 (= 4/8 = 1/2), dus zou je denken o4, maar o4 komt overeen met b100, niet met b10. Gebied b10 omvat gebieden b100 en b101.

Los dit probleem op door een dubbele punt en het niveaunummer aan de Sierpińskicoördinaat te plakken. Dat noemen we de niveaustaart. Gebied b10 is een niveau-2-gebied, want het vereist 2 binaire cijfers, dus zijn octale versie is o4:2. Gebied b1 komt net zo overeen met o4:1, en gebied b100 met o4:3. Als het niveau een veelvoud is van 3, zodat de octale versie al de juiste precisie heeft, dan mag de niveaustaart weggelaten worden. Dus gebied o4 = o4:3 = b100, en de octale Sierpińskicoördinaat van de vierkante kilometer met het Natuurhistorisch Museum Rotterdam erin heeft geen niveaustaart nodig, want het is op niveau 30 dat een veelvoud is van 3.

Voor octale Sierpińskicoördinaten is het voorste stuk van de coördinaat van een kleinere driehoek gelijk aan de coördinaat van een grotere driehoek waar die kleinere driehoek deel van is, als geen van de coördinaten een niveaustaart nodig heeft. Driehoek o662 zit in grotere driehoek o66, die weer zit in nog grotere driehoek o6.

3.3. Hexadecimale coördinaten

Elke groep van vier binaire cijfers komt overeen met één hexadecimaal cijfer (0−9 en a-f). De overeenkomst is als volgt.

Binair 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Hexadecimaal 0 1 2 3 4 5 6 7 8 9 a b c d e f

De letters a-f in een hexadecimale coördinaat mogen in hoofdletters of kleine letters geschreven worden, dat maakt voor de betekenis niet uit.

Een hexadecimale Sierpińskicoördinaat heeft een "x" ervoor. Bijvoorbeeld, het midden en westen van de V.S. valt in b1000 = x8. Een niveaustaart is nodig voor niveaus die geen veelvoud van 4 zijn. Australië ligt in b101 = xa:3. De niveau-30-driehoek van 1 km² met het Natuurhistorisch Museum in Rotterdam erin heet x07a288fc:30, en x07a288f is de niveau-28-driehoek die die niveau-30-driehoek bevat.

Een hexadecimaal Sierpińskicoördinaat heeft ongeveer een kwart zoveel cijfers nodig als de overeenkomstige binaire Sierpińskicoördinaat, en ongeveer 3/4 maal zoveel als de overeenkomstige octale Sierpińskicoördinaat.

Voor hexadecimale Sierpińskicoördinaten is het voorste stuk van de coördinaat van een kleinere driehoek gelijk aan de coördinaat van een grotere driehoek waar die kleinere driehoek deel van is, als geen van de coördinaten een niveaustaart nodig heeft. Driehoek xd94 zit in grotere driehoek xd9, die weer zit in nog grotere driehoek xd.

3.4. Decimale coördinaten

De overeenkomst tussen binaire en decimale Sierpińskicoördinaten is minder duidelijk, omdat 10 (het grondtal van decimale cijfers) geen macht is van 2. Elke volgend decimale cijfer komt gemiddeld overeen met ongeveer 3,32 volgende binaire cijfers.

Om een binaire Sierpińskicoördinaat te vertalen naar een decimale Sierpińskicoördinaat moet je de binaire breuk omzetten naar een decimale breuk, geschreven met cijfers achter de komma, en dan afkappen op het kleinste aantal decimale cijfers dat nodig is om alle coördinaten op dat niveau te kunnen onderscheiden. Zie verderop voor details.

Decimale Sierpińskicoördinaten mogen een "d" ervoor hebben, maar dat is niet verplicht. Een Sierpińskicoördinaat zonder een letter aan het begin wordt opgevat als een decimale Sierpińskicoördinaat. Een niveaustaart is nodig als het grootste aantal binaire cijfers dat kan overeenkomen met het gegeven aantal decimale cijfers niet gelijk is aan het niveaunummer.

Bijvoorbeeld, een niveau-3 Sierpińskicoördinaat heeft 3 binaire cijfers. Welke decimale Sierpińskicoördinaat komt overeen met b001? Een binair getal met 3 cijfers achter de komma heeft een resolutie van 1/23 = 1/8, dus het kleinste verschil tussen twee willekeurige verschillende binaire getallen met 3 cijfers achter de komma is 1/8. Een decimaal getal met 1 cijfer achter de komma heeft een resolutie van 1/101 = 1/10, wat net minder is dan 1/8, dus kunnen we elk uniek binaire getal met 3 cijfers achter de komma een eigen uniek decimaal getal met 1 cijfer achter de komma geven.

b001 betekent 2#0.001, dus 1/8. Die breuk is de dichtstbijzijnde 3-cijferige (achter de komma) binaire breuk voor alle getallen in het interval van 1/16 tot 3/16, of 0,0625 tot 0,1875. De enige 1-cijferige decimale breuk in dat interval is 0.1, dus die 1-cijferige decimale breuk komt overeen met de 3-cijferige binaire breuk 2#0.001, dus b001 komt overeen met d1, en d1 komt overeen met b001.

Net zo komt b010 overeen met 2#0.010 = 2/8, wat overeenkomt met het interval van 3/16 tot 5/16, of 0,1875 tot 0,3125. De 1-cijferige decimale getallen 0,2 en 0,3 vallen in dat interval, dus zowel d2 en d3 kunnen worden gebruikt als decimale versie van b010. Als er op deze manier keus uit meer dan één is, dan kiezen we in het algemeen de grootste. We noemen die keuze de canonieke decimale Sierpińskicoördinaat.

Alles bij elkaar is de overeenkomst tussen binaire en decimale fracties en Sierpińskicoördinaten voor alle niveau-3-coördinaten:

SSFC Binair Decimaal SSFC
b000 2#0 0 0
b001 2#0.001 0.125 1
b010 2#0.01 0.25 3
b011 2#0.011 0.375 4
b100 2#0.1 0.5 5
b101 2#0.101 0.625 6
b110 2#0.11 0.75 8
b111 2#0.111 0.875 9

dus er is een ander 1-cijferige decimale coördinaat voor elk 3-cijferige binaire coördinaat, maar sommige 3-cijferige binaire coördinaten hebben meer dan één mogelijk 1-cijferige decimale coördinaat.

Het grootste aantal binaire cijfers dat overeenkomt met de eerste paar aantallen decimale cijfers zijn als volgt:

Decimaal 1 2 3 4 5 6 7 8 9 10
Binair 3 6 9 13 16 19 23 26 29 33

Dus een 33-cijferige binaire coördinaat kan worden vertaald naar een 10-cijferige decimale coördinaat. Als het niveau gelijk is aan een van deze aantallen binaire cijfers dan heeft de decimale Sierpińskicoördinaat geen niveaustaart nodig. De niveau-29-driehoek van 2 km² waarin het Natuurhistorisch Museum Rotterdam ligt heeft decimale Sierpińskicoördinaat 029823838.

Een decimale Sierpińskicoördinaat heeft ongeveer 30% zoveel cijfers nodig als de overeenkomstige binaire coördinaat.

Voor decimale Sierpińskicoördinaten is de canonieke coördinaat van een grotere driehoek niet altijd het voorste deel van de canonieke coördinaat van alle kleinere driehoeken die daarin zitten, zelfs als de coördinaten geen niveaustaart nodig hebben. Bijvoorbeeld, driehoek 02982394 = b00000111101000101000101011 bevat driehoek 029823957 = b00000111101000101000101011111, maar de kortere decimale coördinaat is niet gelijk aan het voorste deel van de langere decimale coördinaat. Echter, niet-canonieke coördinaat. 02982395 hoort bij dezelfde driehoek als canonieke coördinaat 02982394 en staat wel vooraan de coördinaat van de kleinere driehoek.

3.5. Index

Als je de driehoeken van een bepaald niveau via de Sierpińskikromme doorloopt, dan begin je bij de Sierpińskicoördinaat met allemaal nullen op dat niveau, en tel je steeds 1 op bij dat getal (gezien als een geheel getal) voor elke volgende driehoek. Op niveau \( n \) zijn er \( 2^n \) driehoeken.

Bijvoorbeeld, we volgen de Sierpińskikromme op niveau 6 als we de driehoeken doorlopen in de volgorde o00, o01, o02, o03, o04, o05, o06, o07, o10, o11, enzovoorts tot en met o77, dat de laatste driehoek is voor we terugkeren naar o00, waar die aan grenst.

We kunnen elke driehoek aanduiden met zijn binaire, octale, decimale of hexadecimale Sierpińskicoördinaat, of door driehoeken te tellen vanaf de eerste. De decimale coördinaat gebaseerd op de telling van driehoeken heet de Sierpiński-index van de driehoek.

De eerste driehoek krijgt index 0, de volgende krijgt 1, enzovoorts tot de laatste driehoek (die weer terugleidt naar driehoek 0) die index \( 2^n - 1 \) krijgt. De standaardnotatie voor het aanduiden van een driehoek door zijn index op een bepaald niveau is door "i" voor dat indexnummer te zetten. Een niveaustaart is verplicht voor een Sierpiński-index, omdat elke index op meerdere niveaus voorkomt. Driehoek b010 komt overeen met i2:3, en driehoek b01 met i1:2.

Voor Sierpiński-indexen is de relatie tussen driehoeken en daarinzittende driehoeken anders dan het was voor de Sierpińskicoördinaten. Kleinere driehoek \( i \) op niveau \( n \) zit in grotere driehoek \( i/2 \) op niveau \( n - 1 \), die weer zit in nog grotere driehoek \( i/4 \) op niveau \( n - 2 \). Negeer de rest van deze delingen. Bijvoorbeeld, driehoek i17:9 zit in driehoek i8:8, die weer zit in driehoek i4:7.

De vierkante kilometer met het Natuurhistorisch Museum in Rotterdam erin heeft Sierpiński-index i32023103:30.

3.6. Relatieve coördinaat

Je kunt een relatieve Sierpińskicoördinaat of -index aangeven door een plus- of minteken en een aantal aan de basis-Sierpińskicoördinaat of -index toe te voegen (ná de niveaustaart, als die er is). Het aantal mag 0 zijn en geeft aan hoeveel driehoeken vooruit (+) of achteruit (−) te lopen langs de Sierpińskikromme vanaf de driehoek die door de basiscoördinaat of -index wordt aangeduidt.

Bijvoorbeeld, de niveau-30-driehoek waarin het Natuurhistorisch Museum Rotterdam ligt is o0172121077. De 100e driehoek na die driehoek is o0172121077+100. Die driehoek heeft ook coördinaat o0172121243, maar dat is niet eenvoudig uit je hoofd uit te rekenen uit de basiscoördinaat en het aantal.

Zelfs decimale relatieve Sierpińskicoördinaten zijn niet eenvoudig om te rekenen naar de overeenkomstige absolute (niet-relatieve) Sierpińskicoördinaten. 0298238387:30+100 komt overeen met 0298239319:30, niet met 0298238487:30 zoals je misschien zou denken.

Relatieve Sierpiński-indexen zijn wel eenvoudig te reduceren tot absolute Sierpiński-indexen: tel de relatieve afstand op bij de index. i32023103:30+100 komt overeen met i32023203:30.

3.7. Interval

Je kunt een interval van Sierpińskicoördinaten of -indexen opgeven door twee van zulke coördinaten of -indexen (met niveaustaart en een verschil als nodig of gewenst) aan elkaar te plakken met ".." ertussen. Het type coördinaat (binair, octaal, decimaal, hexadecimaal of index) van het begin en het eind van het interval mogen verschillen. Bijvoorbeeld, b010..o5 geeft een interval van vier driehoeken aan die begint met driehoek b010 = o2 en eindigt met driehoek b101 = o5.

Als het begin en het eind van het interval niet hetzelfde niveau opgeven of impliceren, dan geldt het laagste niveau van de twee. Dus o17..o226 betekent hetzelfde als o17..o22.

De typeaanduiding voor het einde van het interval mag worden weggelaten; het is dan gelijk aan dat van het begin van het interval. Dus o17..o22 mag worden afgekort tot o17..22. Als het einde van het interval decimaal bedoeld is maar het begin van het interval niet, specificeer dan een "d" aan het begin van het einde van het interval. Dus, in 17..22 is het einde een decimale coördinaat net als het begin, maar in o17..22 is het einde van het interval een octale coördinaat net als het begin. In o17..d22 is het begin van het interval octaal maar het einde decimaal.

Als het einde van het interval gelijk is aan het begin, afgezien van het relatieve stuk (met plus- of minteken), dan mag het einde worden weggelaten, afgezien van het relatieve stuk. Dus o17−4..o17+3 mag worden afgekort tot o17−4..+3 om het interval aan te geven dat loopt van 4 driehoeken vóór o17 tot en met 3 driehoeken na o17.

Sierpińskicoördinaten gaan terug naar 0 als ze voorbij hun grootst mogelijke waarde gaan. Als het einde van een interval een eerdere driehoek (volgens de Sierpińskikromme) aangeeft dan het begin van het interval, dan loopt dat interval van het begin van het interval naar de allerlaatste driehoek, naar de allereerste driehoek, en dan naar het einde van het interval. Bijvoorbeeld, o6..1 omvat driehoeken o6, o7, o0 en o1. Eén manier om alle driehoeken op niveau 17 aan te geven is 0:17..−1, en net zo voor andere niveaus.

3.8. Samenvatting

We hebben binaire, octale, decimale en hexadecimale Sierpińskicoördinaten gedefinieerd, en ook de Sierpiński-index. Elk van deze benoemt bepaalde driehoeken op een bol, in een onafgebroken rij die de hele bol bedekt zonder gaten en zonder overlap. Twee Sierpińskicoördinaten of Sierpiński-indexen die veel op elkaar lijken benoemen driehoeken die op de bol dicht bij elkaar zijn.

De diverse coördinaten van de vierkante kilometer waarin het Natuurhistorisch Museum Rotterdam ligt zijn:

Polair O 4.474°, N 51.912°
Binair b000001111010001010001000111111
Octaal o0172121077
Decimaal 0298238387:30
Hexadecimaal x07a288fc:30
Index i32023103:30

4. Inzoomen naar het Natuurhistorisch Museum te Rotterdam

De volgende verzameling plaatjes zoomt in vanaf de hele wereld naar het Natuurhistorisch Museum te Rotterdam, in stappen van 3 niveaus zodat elke driehoek uit het vorige plaatje is verdeeld in 8 = 23 driehoeken in het huidige plaatje. De driehoeken zijn aangeduid met hun decimale Sierpińskicoördinaat.

We beginnen op niveau 3, waar er 8 driehoeken zijn die elk ongeveer 511 miljoen km² omvatten.

Het getal nabij het midden van elke driehoek is de canonieke decimale niveau-3-Sierpińskicoördinaat van die driehoek.

De kromme die door alle driehoeken loopt is de niveau-6-Sierpińskikromme door het midden van alle niveau-6-driehoeken in oplopende volgorde van de Sierpińskicoördinaat. Daaraan kun je zien welk hoekpunt van de niveau-3-driehoek de beginhoekpunt is (waar de kromme binnenkomt), welke de mediaanhoekpunt (die halverwege gepasseerd wordt) en welke de eindhoekpunt (waar de kromme de driehoek verlaat).

De driehoek die met een dikkere rand is aangegeven is degene waarin het Natuurhistorisch Museum ligt.

De plaatjes voor hogere niveaus zijn soortgelijk ingericht.

De niveau-3-Sierpińskikromme heeft een totale lengte van ongeveer 63 000 km, wat 1,6 keer de omtrek van de Aarde is. De niveau-6-Sierpińskikromme is ongeveer 151 000 km lang, wat ongeveer 3,8 keer de omtrek van de Aarde is.

Merk op dat er gaten zijn in de coördinaat. Niet elke mogelijke coördinaat heeft zijn eigen driehoek, want er zijn 10 mogelijke getallen met 1 cijfer, voor maar 8 driehoeken. Coördinaten 2 en 7 komen op dit niveau niet voor.

We zoomen in op niveau-3-driehoek 0 en verdelen het in 8 niveau-6-driehoeken. Er zijn 64 niveau-6-driehoeken die elk ongeveer 16 miljoen km² groot zijn. De getoonde niveau-9-Sierpińskikromme loopt door alle niveau-6-driehoeken en is ongeveer 462 000 km lang, wat verder is dan de afstand tussen de Aarde en de Maan.

Dan zoomen we in op niveau-6-driehoek 02, die veel van noord- en west-centraal-Europa en een segment van Rusland omvat, eindigend in noordwest-China. We verdelen het in 8 niveau-9-driehoeken. Er zijn 512 niveau-9-driehoeken, elk ongeveer 2 miljoen km² groot. De getoonde niveau-12-Sierpińskikrommen loopt door alle niveau-9-driehoeken en is ongeveer 1,31 miljoen km lang.

We zoomen in naar niveau-9-driehoek 029, die de Benelux, het meeste van Duitsland, veel van Frankrijk, en een deel van Groot-Brittannië, Polen en Tsjechië, en een heel klein stukje van Denemarken omvat. We verdelen het in 8 niveau-12-driehoeken. Er zijn 4096 niveau-12-driehoeken, elk ongeveer 250 000 km² groot. De getoonde niveau-15-Sierpińskikromme loopt door alle niveau-12-driehoeken en is ongeveer 3,8 miljoen km lang.

Dan zoomen we in op niveau-12-driehoek 0298:12, die veel van Nederland en noordwest-Duitsland omvat. We verdelen het in 8 niveau-15-driehoeken, waarvan er 32 768 zijn, elk ongeveer 31 000 km² groot. De getoonde niveau-18-Sierpińskikromme loopt door alle niveau-15-driehoeken en is ongeveer 10,6 miljoen km lang.

Nu zoomen we in naar niveau-15-driehoek 02982:15, die een westelijk deel van Nederland en een klein stukje van België omvat. We verdelen het in 8 niveau-18-driehoeken, waarvan er 262 144 zijn, elk ongeveer 3900 km² groot. De getoonde niveau-21-Sierpińskikromme loopt door alle niveau-18-driehoeken en is ongeveer 30 miljoen km lang. Vanaf dit niveau komt de onderliggende kaart van OpenStreetMap.

We zoomen in naar niveau-18-driehoek 029823:18, die een deel van de Zeeuwse en Zuid-Hollandse eilanden omvat met een hoekpunt in Rotterdam. We verdelen het in 8 niveau-21-driehoeken, waarvan er 2 097 152 zijn, elk ongeveer 488 km² groot. De getoonde niveau-24-Sierpińskikromme loopt door alle niveau-21-driehoeken en is ongeveer 85 miljoen km lang, ongeveer de helft van de afstand tussen de Aarde en de Zon.

Dan zoomen we in naar niveau-21-driehoek 0298238:21 die reikt van Vlaardingen tot Ridderkerk tot voorbij Oud-Beijerland. We verdelen het in 8 niveau-24-driehoeken, waarvan er 16 777 216 zijn, elk ongeveer 61 km² groot. De getoonde niveau-27-Sierpińskikromme loopt door alle niveau-24-driehoeken en is ongeveer 240 miljoen km lang, langer dan de afstand tussen de Zon en de Aarde.

Dan zoomen we in naar niveau-24-driehoek 02982378:24 die oost-Vlaardingen en Schiedam en west-Rotterdam bevat. We verdelen het in 8 niveau-27-driehoeken, waarvan er 134 217 728 zijn, elk ongeveer 7,6 km² groot. De getoonde niveau-30-Sierpińskikromme loopt door alle niveau-27-driehoeken en is ongeveer 679 miljoen km lang.

Dan zoomen we in naar niveau-27-driehoek 029823832:27, die vanaf de Erasmusbrug naar het westen reikt. We verdelen die in 8 niveau-30-driehoeken, waarvan er 1 073 741 824 zijn, elk ongeveer 1,0 km² groot. De getoonde niveau-33-Sierpińskikromme gaat door alle niveau-30-driehoeken en is ongeveer 1,92 miljard km lang.

We zoomen in naar niveau-30-driehoek 0298238387:30, die het Museumpark bevat. We verdelen die in 8 niveau-33-driehoeken, waarvan er 8 589 934 592 zijn, elk ongeveer 0,12 km² groot. De getoonde niveau-33-Sierpińskikromme gaat door alle niveau-30-driehoeken en is ongeveer 5,4 miljard km lang.

We zoomen in naar niveau-33-driehoek 0298238392, die het zuidelijke deel van het Museumpark en een oostelijk deel van het Erasmus Medisch Centrum bevat. We verdelen die in 8 niveau-36-driehoeken, waarvan er 68 719 476 736 zijn, elk ongeveer 15 000 m² groot. De getoonde niveau-36-Sierpińskikromme gaat door alle niveau-33-driehoeken en is ongeveer 15 miljard km lang.

We zoomen in naar niveau-36-driehoek 02982383923 die het Natuurhistorisch Museum en een groot deel van het park ten westen ervan bevat. We verdelen die driehoek in 8 niveau-39-driehoeken, waarvan er 549 755 813 888 zijn, elk ongeveer 1900 m² groot. De getoonde niveau-39-Sierpińskikromme gaat door alle niveau-36-driehoeken en is ongeveer 43 miljard km lang. Niveau-39-driehoek 029823839233 is grotendeels gevuld door het Natuurhistorisch Museum in Rotterdam.

5. Omrekenen van Sierpińskicoördinaat naar lengtegraad en breedtegraad

5.1. Omrekenen van Sierpińskicoördinaat naar binaire Sierpińskicoördinaat

5.1.1. Omrekenen van octale naar binaire Sierpińskicoördinaat

Het omrekenen van een octale Sierpińskicoördinaat naar een binaire Sierpińskicoördinaat is simpel: vervang elk octale cijfer door de bijbehorende drie binaire cijfers, en breek af na het aantal binaire cijfers gelijk aan het niveau van de coördinaat.

Bijvoorbeeld, wat is de binaire versie van o4364:11? 8#4 komt overeen met 2#100, 8#3 met 2#011, en 8#6 met 2#110, dus 8#4364 komt overeen met 2#100011110100, wat wijst op b100011110100, maar we moeten het afbreken na de eerste 11 cijfers omdat het een niveau-11-coördinaat is, dus het juiste antwoord is b10001111010.

5.1.2. Omrekenen van hexadecimale naar binaire Sierpińskicoördinaat

Omrekenen van een hexadecimale Sierpińskicoördinaat naar een binaire Sierpińskicoördinaat is simpel: vervang elk hexadecimale cijfer door de overeenkomstige vier binaire cijfers, en breek af na het aantal binaire cijfers gelijk aan het niveau van de coördinaat.

Bijvoorbeeld, wat is de binaire versie van x7f? 16#7 komt overeen met 2#0111, en 16#f met 2#1111, dus 16#7f komt overeen met 2#01111111, wat duidt op b01111111. De hexadecimale coördinaat vereiste geen niveaustaart, dus de binaire coördinaat heeft al de juiste lengte.

5.1.3. Omrekenen van Sierpiński-index naar binaire Sierpińskicoördinaat

Omrekenen van een Sierpiński-index naar een binaire Sierpińskicoördinaat is simpel: reken de decimale index om naar het overeenkomstige binaire getal, en plak nullen ervoor tot het aantal binaire cijfers gelijk is aan het niveau van de index.

Bijvoorbeeld, wat is de binaire versie van i45:9? Het binaire getal dat overeenkomt met decimaal 45 is 2#101101, en dat heeft maar 6 binaire cijfers, dus plakken we er 3 nullen voor en vinden b000101101.

5.1.4. Omrekenen van decimale naar binaire Sierpińskicoördinaat

Omrekenen van een decimale Sierpińskicoördinaat is moeilijker dan de andere omrekeningen die ik hierboven beschreef, want 10 is geen macht van 2, waar 8 en 16 wel machten van 2 zijn.

De eerste stap is om te bepalen hoeveel binaire cijfers overeenkomen met de decimale coördinaat. Als de decimale coördinaat een niveaustaart heeft, dan bepaalt dat niveau het aantal binaire cijfers. Als de decimale coördinaat \( d \) decimale cijfers maar geen niveaustaart heeft, dan is het aantal \( b\) van de binaire cijfers het grootste gehele getal waarvoor \( 2^b \le 10^d \), wat gelijkwaardig is aan \( b\log_{10}(2) \le d \), wat betekent

\[ b = \left\lfloor \frac{d}{\log_{10}(2)} \right\rfloor = \left\lfloor d\log_{2}(10) \right\rfloor \]

waar \( \log_{10}(2) ≈ 0.30103001 \) en \( \log_{2}(10) = 1/\log_{10}(2) ≈ 3.321928 \).

Bijvoorbeeld, als de decimale coördinaat 11 decimale cijfers heeft, dan is \( d = 11 \). \(11\log_{2}(10) ≈ 36.54\) dus \( b = 36 \). Even nakijken: \( 10^d = 10^{11} = 100 000 000 000 \) en \( 2^b = 2^{36} = 68 719 476 736 \) en \( 2^{b+1} = 2^{37} = 137 438 953 472 \) dus \( 2^{36} \le 10^{11} \) en \( 2^{37} \gt 10^{11} \) dus is 36 inderdaad het juiste antwoord.

Als \( D \) de decimale coördinaat is, dan staat dat voor de breuk \( D/10^d \). We zoeken naar binaire coördinaat \( B \), die staat voor de breuk \( B/2^b \) die zo dicht mogelijk bij \( D/10^d \) is. Dus

\[ B = \left[ \frac{D×2^b}{10^d} \right] = \left\lfloor \frac{D×2^b}{10^d} + \frac12 \right\rfloor = \left\lfloor \frac{D×2^b + \frac{1}{2}×10^d}{10^d} \right\rfloor \]

Nu hebben we \( B \) maar op grondtal 10 (aannemend dat we een decimale rekenmachine gebruikten). Om de binaire cijfers van links naar rechts te berekenen:

Voor elk van de \( b \) binaire cijfers,

  1. Vermenigvuldig \( B \) met \( b \) en noem het antwoord weer \( B \).
  2. Als \( B \) kleiner is dan \( 2^b \), dan is het volgende binaire cijfer gelijk aan 0. Anders is het volgende binaire cijfer gelijk aan 1 en moet je \( 2^b \) van \( B \) aftrekken en het antwoord weer \( B \) noemen.

Wat is de binaire versie van 80?

Die decimale Sierpińskicoördinaat heeft 2 cijfers wat overeenkomt met 6 binaire cijfers. We berekenen

\begin{align*} 2^b & = 2^{6} = 64 \\ 10^d & = 10^{2} = 100 \\ B & = \left\lfloor \frac{80×2^{6} + \frac{1}{2}×10^{2}}{10^{2}} \right\rfloor \\ & = \left\lfloor \frac{80×64 + 50}{100} \right\rfloor \\ & = \left\lfloor \frac{5170}{100} \right\rfloor \\ & = 51 \end{align*}

Nu vertalen we 51 van een decimaal naar een binair getal.

Voor het eerste binaire cijfer vinden we \( B = 2×51 = 102 \), wat niet kleiner is dan \( 2^b = 2^{6} = 64 \), dus het eerste binaire cijfer is 1 en we trekken 64 af van \( B \) en vinden \( B = 102 - 64 = 38 \).

Voor het tweede binaire cijfer vinden we \( B = 2×38 = 76 \), wat niet kleiner is dan 64, dus het tweede binaire cijfer is 1 en we trekken 64 af van \( B \) en vinden \( B = 76 - 64 = 12 \).

Voor het derde binaire cijfer vinden we \( B = 2×12 = 24 \), wat kleiner is dan 64, dus het derde binaire cijfer is 0.

Voor het vierde binaire cijfer vinden we \( B = 2×24 = 48 \), wat kleiner is dan 64, dus het vierde binaire cijfer is 0.

Voor het vijfde binaire cijfer vinden we \( B = 2×48 = 96 \), wat niet kleiner is dan 64, dus het vijfde binaire cijfer is 1 en we trekken 64 af van \( B \) en vinden \( B = 96 - 64 = 32 \).

Voor het zesde en laatste binaire cijfer vinden we \( B = 2×32 = 64 \) wat niet kleiner is dan 64, dus het zesde binaire getal is 1.

Alles bij elkaar is het resultaat 2#110011, dus de binaire versie van 80 is b110011.

Merk op dat dit voorbeeld ging over een coördinaat van laag niveau, wat betekent dat de getallen klein blijven. Voor een coördinaat van niveau 40 hebben de getallen in deze berekeningen 12 decimale cijfers, en dat is te groot om met volledige nauwkeurigheid in een typische rekenmachine te passen. Gebruik een programma dat hele getallen met willekeurige aantallen cijfers aankan, of maak je anders zorgen over afrondfouten.

5.2. Omrekenen van binaire Sierpińskicoördinaat naar lengtegraad en breedtegraad

Gegeven een Sierpińskicoördinaat, reken als volgt om naar lengtegraad en breedtegraad:

  1. Reken eerst de Sierpińskicoördinaat om naar binair formaat, als het niet al een binaire coördinaat is.
  2. Maak dan een begindriehoek op basis van de eerste drie binaire cijfers volgens de volgende tabel.

    Octaal A B C
    000 (0,0,+1) (0,+1,0) (+1,0,0)
    001 (+1,0,0) (0,+1,0) (0,0,−1)
    010 (0,0,−1) (0,+1,0) (−1,0,0)
    011 (−1,0,0) (0,+1,0) (0,0,+1)
    100 (0,0,+1) (0,−1,0) (−1,0,0)
    101 (−1,0,0) (0,−1,0) (0,0,−1)
    110 (0,0,−1) (0,−1,0) (+1,0,0)
    111 (+1,0,0) (0,−1,0) (0,0,+1)

    De drie getallen voor elk van de punten A, B en C zijn cartesische coördinaten \(x, y, z\). Punt (0,0,+1) is de noordpool, punt (+1,0,0) is op lengtegraad 0 en breedtegraad 0, en punt (0,+1,0) is op 90° oosterlengte en breedtegraad 0.

  3. Dan, voor elk volgend binaire cijfer,

    1. Bereken de som van punten A en C en noem het D.
    2. Bereken de lengte van D (van de lijn die van de oorsprong op (0,0,0) naar punt D gaat), wat gelijk is aan \(r = \sqrt{x^2 + y^2 + z^2}\).
    3. Deel alle coördinaten van D door \( r \). Nu heeft D lengte 1 net zoals A, B en C hebben.
    4. Als het huidige binaire cijfer gelijk is aan 0, zet dan C gelijk aan B. Als het huidige binaire cijfer gelijk is aan 1, zet dan A gelijk aan B.
    5. Zet dan B gelijk aan D.

  4. Als je alle binaire cijfers hebt verwerkt, dan heb je de hoekpunten van de uiteindelijke driehoek gevonden. Bereken dan de som van punten A, B en C en noem het E.
  5. Bereken de lengte van E, die gelijk is aan \(r = \sqrt{x^2 + y^2 + z^2}\).
  6. De breedtegraad van het midden van de driehoek is gelijk aan \(φ = \arcsin(z/r)\)
  7. De lengtegraad van het midden van de driehoek is \(λ = \arctan(y,x)\) waarin \(\arctan\) de speciale arctangensfunctie met twee argumenten is. \( \arctan(1,0) = 90° \) en \( \arctan(0,−1) = 180° \). Als je die functie niet beschikbaar hebt, gebruik dan \(λ = \arctan(y/x)\) maar tel er 180° bij op als \( x \) negatief is. Als het antwoord niet tussen −180° en +180° ligt, dan mag je er 360° bij tellen of aftrekken tot het dat wel doet.

Als voorbeeld zullen we locatie bepalen die overeenkomt met o01. De binaire versie is b000001. De eerste drie binaire cijfers zijn 000, dus we beginnen met A = (0,0,+1), B = (0,+1,0), C = (+1,0,0).

Het 4e binaire cijfer is 0. De som van A en C is D = (+1, 0, +1). De lengte van D = \( r = \sqrt{1^2 + 0^2 + 1^2} = \sqrt{2} ≈ 1.414214 \), dus we delen de coördinaten van D daardoor en vinden D = (+0,7071068, 0, +0,7071068). Het binaire cijfer is 0, dus we zetten C gelijk aan B, en dan B gelijk aan D, en vinden A = (0, 0, +1), B = (+0,7071068, 0, +0,7071068), C = (0, +1, 0).

Het 5e binaire cijfer is 0. De som van A en C is D = (0, +1, +1). De lengte van D = \( r = \sqrt{0^2 + 1^2 + 1^2} = \sqrt{2} ≈ 1.414214 \), dus we delen de coördinaten van D daardoor en vinden D = (0, +0,7071068, +0,7071068). Het binaire cijfer is 0, dus we zetten C gelijk aan B, en dan B gelijk aan D, en vinden A = (0, 0, +1), B = (0, +0,7071068, +0,7071068), C = (+0,7071068, 0, +0,7071068).

Het 6e, laatste binaire cijfer is gelijk aan 1. De som van A en C is D = (0,7071068, 0, 1,7071068). De lengte van D = \( r = \sqrt{0.7071068^2 + 0^2 + 1.7071068^2} = \sqrt{3.14214} ≈ 1.847759 \), dus we delen de coördinaten van D daardoor en vinden D = (+0,3826834, 0, +0,9238795). Het binaire cijfer is 1, dus we zetten A gelijk aan B, en dan B gelijk aan D, en vinden A = (0, +0,7071068, +0,7071068), B = (+0,3826834, 0, +0,9238795), C = (+0,7071068, 0, +0,7071068). Deze drie punten zijn de hoekpunten van de gezochte driehoek.

De som van de laatste hoekpunten A, B en C is E = (+1,08979, +0,7071068, +2,338093). De lengte van E is \(r = \sqrt{1.08979^2 + 0.7071068^2 + 2.338093^2} = \sqrt{7.154322} = 2.674756\). De breedtegraad van het midden van de driehoek is \( φ = \arcsin(+2.338093/2.674756) = +60.94°\). De lengtegraad is \(λ = \arctan(+0.7071068,+1.08979) = +32.98°\). Dus het midden van driehoek o01 is op 32,98° oosterlengte en 60,94° noorderbreedte.

6. Omrekenen van lengtegraad en breedtegraad naar Sierpińskicoördinaat

6.1. Omrekenen van binaire Sierpińskicoördinaat naar andere Sierpińskicoördinaten

Omrekenen van een binaire naar een octale Sierpińskicoördinaat is simpel: plak er nullen achter tot het aantal binaire cijfers een veelvoud is van 3, vervang dan elke groep van drie binaire cijfers door het overeenkomstige octale cijfer, en voeg een niveaustaart toe als het oorspronkelijke aantal binaire cijfers geen veelvoud was van 3.

Bijvoorbeeld, wat is de octale versie van b10001111010? Het binaire getal number 2#10001111010 heeft 11 cijfers, dus we plakken er een 0 achter zodat we een veelvoud van 3 cijfers krijgen, en vinden 2#100011110100. 2#100 komt overeen met 8#4, 2#011 met 8#3, en 2#110 met 8#6, dus 2#100011110100 komt overeen met 8#4364. Dat neigt naar o4364 maar we moeten een niveaustaart toevoegen omdat het originele aantal binaire cijfers geen veelvoud was van 3. Het juiste antwoord is o4364:11.

6.1.1. Omrekenen van binair naar hexadecimale Sierpińskicoördinaat

Omrekenen van een binaire naar een hexadecimale Sierpińskicoördinaat is eenvoudig: plak er nullen aan tot het aantal binaire cijfers een veelvoud is van 4, vervang dan elke vier binaire cijfers door het overeenkomstige hexadecimale cijfer, en voeg een niveaustaart toe als het originele aantal binaire cijfers geen veelvoud was van 4.

Bijvoorbeeld, wat is de hexadecimale versie van b01111111? 2#01111111 heeft 8 binaire cijfers en dat is al een veelvoud van 4. 2#0111 komt overeen met 16#7, en 2#1111 met 16#f, dus krijgen we x7f. De hexadecimale coördinaat heeft geen niveaustaart nodig want de binaire coördinaat had al een veelvoud van 4 cijfers.

6.1.2. Omrekenen van binaire Sierpińskicoördinaat naar Sierpiński-index

Omrekenen van een binaire Sierpińskicoördinaat naar een Sierpiński-index is eenvoudig: reken het binaire hele getal om naar het overeenkomstige decimale hele getal, en voeg een niveaustaart toe.

Bijvoorbeeld, welke Sierpiński-index komt overeen met b000101101? Dit is een niveau-9-coördinaat. 2#000101101 komt overeen met 45, dus we vinden i45:9.

6.1.3. Omrekenen van een binaire naar een decimale Sierpińskicoördinaat

Omrekenen van een decimale Sierpińskicoördinaat is moeilijker dan de andere omrekeningen hierboven beschreven, omdat 10 geen macht is van 2, wat 8 and 16 wel zijn.

De eerste stap is om het aantal \( d \) van de decimale cijfers te vinden dat overeenkomt met het aantal \( b \) van de binaire cijfers. Dat getal \( d \) is het kleinste gehele getal zodat \( 2^b \le 10^d \), wat gelijkwaardig is met \( b\log_{10}(2) \le d \), waaruit volgt

\[ d = \left\lceil b \log_{10}(2) \right\rceil \]

waar \( \log_{10}(2) ≈ 0.30103001 \).

Echter, het gevonden aantal decimale cijfers kan zelf weer overeenkomen met meer dan \( b \) binaire cijfers. Het aantal \( b_2 \) van de binaire cijfers dat overeenkomt met \( d \) decimale cijfers is

\[ b_2 = \left\lfloor \frac{d}{\log_{10}(2)} \right\rfloor = \left\lfloor d\log_{2}(10) \right\rfloor \]

Als \( b_2 \) verschilt van \( b \), plak dan nullen achter de binaire coördinaat totdat die \( b_2 \) binaire cijfers heeft, en voeg een niveaustaart (voor niveau \( b \)) toe aan de Sierpińskicoördinaat.

Bijvoorbeeld, als de binaire coördinaat 10 cijfers heeft, dan is \( b = 10 \). \( 10\log_{10}(2) ≈ 3.01 \) dus \( d = 4 \). Even nakijken: \( 10^d = 10^{4} = 10 000 \) en \( 2^b = 2^{10} = 1024 \) en \( 10^{d-1} = 10^{3} = 1000 \) dus \( 2^{10} \le 10^{4} \) en \( 2^{10} \gt 10^{3} \) dus 4 is inderdaad het juiste antwoord.

Welk aantal binaire cijfers komt overeen met \( d = 4 \)? \( 4/\log_{10}(2) ≈ 13.29 \) dus \( b_2 = 13 \). Dit is 3 meer dan \( b = 10 \), dus we moeten 3 nullen achter de binaire coördinaat plakken, en de decimale Sierpińskicoördinaat vereist niveaustaart ":10".

Als de binaire coördinaat (met nullen erachtergeplakt waar nodig) gelijk is aan \( B \), dan staat dat voor de breuk \( B/2^{b_2} \). We zoeken naar decimale coördinaat \( D \) die staat voor de breuk \( D/10^d \) het dichtst bij \( B/2^{b_2} \). Dus

\[ D = \left[ \frac{B×10^d}{2^{b_2}} \right] = \left\lfloor \frac{B×10^d}{2^{b_2}} + \frac12 \right\rfloor = \left\lfloor \frac{B×10^d + \frac{1}{2}×2^{b_2}}{2^{b_2}} \right\rfloor \]

Nu hebben we \( D \), maar misschien is die nog korter dan het zou moeten zijn omdat voorlopende nullen weggelaten zijn. Als \( D \) minder dan \( d \) cijfers heeft, plak er dan voldoende nullen voor zodat het wel \( d \) cijfers heeft.

En als \( b_2 ≠ b \), dan moet een niveaustaart (voor niveau \( b \)) worden toegevoegd.

Wat is de decimale versie van b0000110011?

Die decimale Sierpińskicoördinaat heeft 10 binaire cijfers, wat overeenkomt met 4 decimale cijfers, wat zelf weer overeenkomt met 13 binaire cijfers, dus moeten we drie nullen erachterplakken. Het binaire getal om te vertalen naar decimaal is daarom 2#0000110011000. Het decimale getal dat daarmee overeenkomt is 408, dus B = 408. We berekenen

\begin{align*} 2^{b_2} & = 2^{13} = 8192 \\ 10^d & = 10^{4} = 10000 \\ D & = \left\lfloor \frac{408×10^{4} + \frac{1}{2}×2^{13}}{2^{13}} \right\rfloor \\ & = \left\lfloor \frac{408×10000 + 512}{8192} \right\rfloor \\ & = \left\lfloor \frac{4080512}{8192} \right\rfloor \\ & = 498 \end{align*}

Dus het resultaat is 498, wat 3 cijfers heeft maar we verwachten er 4, dus plakken we er een nul voor. We moeten ook een niveaustaart toevoegen voor niveau 10, dus de decimale versie van b0000110011 is 0498:10.

Merk op dat dit voorbeeld voor een coördinaat van laag niveau was, wat betekent dat de getallen klein blijven. Voor een coördinaat op niveau 40 komen in deze berekeningen decimale getallen voor met 12 cijfers, wat te veel is om met volledige nauwkeurigheid in een typische rekenmachine te passen. Gebruik een programma dat gehele getallen met willekeurige aantallen cijfers aankan, of maak je anders zorgen over afrondfouten.

6.2. Omrekenen van lengtegraad en breedtegraad naar binaire Sierpińskicoördinaat

Gegeven breedtegraad \( φ \) en lengtegraad \( λ \) van een punt P, reken dit als volgt om naar een binaire Sierpińskicoördinaat:

  1. Bereken de cartesische coördinaten \( x, y, z \) van punt P:

    \begin{align*} x & = \cos(λ) \cos(φ) \\ y & = \sin(λ) \cos(φ) \\ z & = \sin(φ) \end{align*}

  2. Bepaal de eerste drie binaire cijfers uit de tekens van \(x, y, z\):

    \( x \) \( y \) \( z \) Octant
    <0 <0 <0 101
    ≥0 <0 <0 110
    <0 ≥0 <0 010
    ≥0 ≥0 <0 001
    <0 <0 ≥0 100
    ≥0 <0 ≥0 111
    <0 ≥0 ≥0 011
    ≥0 ≥0 ≥0 000

    Het "octant" geeft de eerste drie binaire cijfers.

  3. Vind punten A, B, C die horen bij de octant, zoals in Hoofdstuk 5.2.
  4. Dan, voor elk volgende binaire cijfer,

    1. Bereken de som van punten A en C en noem het D.
    2. Bereken de lengte van D, die gelijk is aan \( r = \sqrt{x^2 + y^2 + z^2} \) als \( x, y, z \) de coördinaten van D zijn.
    3. Deel alle coördinaten van D door \( r \). Nu heeft D lengte 1, net zoals A, B en C hebben.
    4. Bepaal of punt P binnenin boldriehoek ABD is: Bereken de determinant van de 3-bij-3-matrix gevormd uit P, A en B (in die volgorde), en van de matrix gevormd uit P, B en D, en van de matrix gevormd uit P, D en A. Als alledrie deze determinanten hetzelfde teken hebben, dan ligt punt P in de boldriehoek.

      De determinant \( Δ \) van een 3-bij-3-matrix is

      \begin{align*} Δ & = \det\left( \begin{matrix} a & d & g \\ b & e & h \\ c & f & i \end{matrix} \right) \\ & = a (ei - fh) - b (di - fg) + c (dh - eg) \end{align*}

    5. Als P in die driehoek is, dan is het volgende binaire cijfer een 0. Zet dan C gelijk aan B, en dan B gelijk aan D.
    6. Anders, als P niet in die driehoek is, dan is het volgende binaire cijfer een 1. Zet dan A gelijk aan B, en dan B gelijk aan D.

  5. Ga door tot je de gewenste precisie hebt bereikt. Eén maat voor die precisie is de helft van de hoek tussen A en C. Die hoek is 45° op niveau 3 en wordt elk niveau gemiddeld met een factor ½√2 ≈ 0,7071068 vermenigvuldigd, dus de precisie \( ρ \) van niveau \( n \) is dan gelijk aan \( ρ = 90°× \left(\frac{1}{2}\right)^{n/2} \). Als \( ρ_0 \) de gewenste precisie is, dan bereik je die op niveau \( n = \left\lceil 2×\log_2(90°/ρ_0) \right\rceil = \left\lceil 2×\log(90°/ρ_0)/\log(2) \right\rceil \).

Bijvoorbeeld, wat is de binaire Sierpińskicoördinaat van de plaats op 60,94° noorderbreedte en 32,98° oosterlengte, met een precisie van 5°?

Voor een precisie van 5° moeten we rekenen tot niveau \( n = \left\lceil 2×\log_2(90°/5°) \right\rceil = \left\lceil 8.33985 \right\rceil = 9 \).

Dan is \( λ = 32.98° \) en \( φ = 60.94° \). De overeenkomstige cartesische coördinaten van punt P zijn

\begin{align*} x & = \cos(32.98°) \cos(60.94°) = 0.4074558 \\ y & = \sin(32.98°) \cos(60.94°) = 0.2644027 \\ z & = \sin(60.94°) = 0.8741115 \end{align*}

Gegeven dat alle drie de coördinaten positief zijn ligt deze plaats in octant 000, dus dat zijn de eerste drie cijfers van de binaire Sierpińskicoördinaat.

De punten A, B en C die horen bij octant 000 zijn A = (0,0,+1), B = (0,+1,0), C = (+1,0,0).

Voor het vierde binaire cijfer berekenen we som D van punten A en C: D = (+1, 0, +1). De lengte van D is \( r = \sqrt{1^2 + 0^2 + 1^2} = \sqrt{2} ≈ 1.414214 \), dus delen we de coördinaten van D door dat getal en vinden D = (+0,7071068, 0, +0,7071068).

Dan berekenen we de determinant van de matrix gevormd uit P, A, B. Die matrix is

\[ \left( \begin{matrix} +0.4074558 & 0 & 0 \\ +0.2644027 & 0 & +1 \\ +0.8741115 & +1 & 0 \end{matrix} \right) \]

en zijn determinant is +0,4074558×(0×0 − +1×+1) − +0,2644027×(0×0 − +1×0) + +0,8741115×(0×+1 − 0×0) = −0,4074558.

Net zo is de matrix gevormd uit P, B en D

\[ \left( \begin{matrix} +0.4074558 & 0 & +0.7071068 \\ +0.2644027 & +1 & 0 \\ +0.8741115 & 0 & +0.7071068 \end{matrix} \right) \]

en zijn determinant is +0,4074558×(+1×+0,7071068 − 0×0) − +0,2644027×(0×+0,7071068 − 0×+0,7071068) + +0,8741115×(0×0 − +1×+0,7071068) = −0,3299754, wat hetzelfde teken heeft als de vorige determinant.

en de matrix gevormd uit P, D en A is

\[ \left( \begin{matrix} +0.4074558 & +0.7071068 & 0 \\ +0.2644027 & 0 & 0 \\ +0.8741115 & +0.7071068 & +1 \end{matrix} \right) \]

met determinant +0,4074558×(0×+1 − +0,7071068×0) − +0,2644027×(+0,7071068×+1 − +0,7071068×0) + +0,8741115×(+0,7071068×0 − 0×0) = −0,186961, die hetzelfde teken heeft als de andere twee determinanten, dus punt P is binnenin driehoek ABD. Dat betekent dat het volgende binaire cijfer een 0 is, en dat we C gelijk zetten aan B, en dan B aan D, en vinden A = (0, 0, +1), B = (+0,7071068, 0, +0,7071068), C = (0, +1, 0).

Voor het vijfde binaire cijfer vinden we D = (0, +0,7071068, +0,7071068) en determinanten +0,1869610, +0,1011265 en +0,2881148, die allemaal hetzelfde teken hebben dus punt P is binnenin driehoek ABD, dus het binaire cijfer is 0, en we zetten C gelijk aan B, en dan B gelijk aan D, en vinden A = (0, 0, +1), B = (0, +0,7071068, +0,7071068), C = (+0,7071068, 0, +0,7071068).

Voor het zesde binaire cijfer vinden we D = (+0,3826834, 0, +0,9238795) en determinanten −0,2881148, +0,1011973 en −0,1011825, die niet allemaal hetzelfde teken hebben, dus punt P is niet in driehoek ABD maar in plaats daarvan in driehoek ADC. Het binaire cijfer is 1, en we zetten A gelijk aan B, en dan B gelijk aan D, en vinden A = (0, +0,7071068, +0,7071068), B = (+0,3826834, 0, +0,9238795), C = (+0,7071068, 0, +0,7071068).

Voor het zevende binaire cijfer vinden we D = (+0,4082483, +0,4082483, +0,816497) en determinanten +0,1011973, −0,0000085 en +0,0583854, die niet allemaal hetzelfde teken hebben dus punt P is niet in driehoek ABD maar in driehoek ADC. Het binaire cijfer is 1, en we zetten A gelijk aan B, en dan B gelijk aan D, en vinden A = (+0,3826834, 0, +0,9238795), B = (+0,4082483, +0,4082483, +0,816497), C = (+0,7071068, 0, +0,7071068).

Voor het achtste binaire cijfer vinden we D = (+0,5555702, 0, +0,8314696) en determinanten −0,0000085, −0,0297603 en −0,0515824, die allemaal hetzelfde teken hebben, dus P is binnenin driehoek ABD. Het binaire cijfer is 0, en we zetten C gelijk aan B, en dan B gelijk aan D, en vinden A = (+0,3826834, 0, +0,9238795), B = (+0,5555702, 0, +0,8314696), C = (+0,4082483, +0,4082483, +0,816497).

Voor het negende en laatste binaire cijfer vinden we D = (+0,4046150, +0,2088466, +0,8903200) en determinanten +0,0515824, −0,0111635 en +0,0000044, die niet allemaal hetzelfde teken hebben, dus punt P is niet binnen driehoek ABD maar binnen driehoek ADC. Het binaire cijfer is 1, en we zetten A gelijk aan B, en dan B gelijk aan D, en vinden A = (+0,5555702,0,+0,8314696), B = (+0,4046150, +0,2088466, +0,8903200), C = (+0,4082483, +0,4082483, +0,816497).

De binaire cijfers zijn 000001101, dus de binaire Sierpińskicoördinaat is b000001101.


© 2015 Louis Strous. Ik maakte de plaatjes in dit artikel met QGIS. Ik deed alle berekeningen die met Sierpińskicoördinaten te maken hebben, met een zelfgeschreven computerprogramma. De kaartinformatie die ik gebruikte kwam van Natural Earth, OpenStreetMap en van Google Maps.