Commit 88d6e406 authored by Hugo Buddelmeijer's avatar Hugo Buddelmeijer
Browse files

Proof-of-concept script on how the idea of HTM trixels can be improved.

parent 5e6c9de7
"""
This is a proof-of-concept script on how the idea of HTM trixels
can be improved.
"""
ideaByDRB = """
Gegeven twee orientaties (bit notatie)
/\
/10\
/____\
/\ 00 /\
/01\ /11\
/____\/____\
(d.w.z. declinatie van 10 is groter dan van 00, 01 en 11.)
____________
\ 01 /\ 11 /
\ /00\ /
\/____\/
\ 10 /
\ /
\/
Als je die samenvoegt kun je een hele bol als volgt bedekken
____________________________________________________________
/\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /
/10\ /00\ /10\ /00\ /10\ /00\ /10\ /00\ /10\ /00\ /
/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/_____
/\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\
/01\ /11\ /01\ /11\ /01\ /11\ /01\ /11\ /01\ /11\ /01\ /11\
/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\
\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /
\ /00\ /10\ /00\ /10\ /00\ /10\ /00\ /10\ /00\ /10\ /00\ /
\/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/
/\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /
/11\ /01\ /11\ /01\ /11\ /01\ /11\ /01\ /11\ /01\ /11\ /
/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/
\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /\ 01 /\ 11 /\
\ /00\ /10\ /00\ /10\ /00\ /10\ /00\ /10\ /00\ /10\ /00\
\/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\
/\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /\ 00 /\ 10 /
/11\ /01\ /11\ /01\ /11\ /01\ /11\ /01\ /11\ /01\ /11\ /
/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/____\/
Je ziet voor iedere oost-west strip het patroon 00-11-10-01 terugkomen
en voor noord-zuid de patronen 00-10, 10-00, 01-01 en 11-11.
Hetzelfde patroon houd je aan voor de eerstvolgende grotere trixel.
Gegeven drie operatoren:
L(h) # Left of htm h
R(h) # Right of htm h
J(h) # Juxtaposed/opposite of htm h
Je kunt deze operatoren nu recursief definieren als
L(h) =
h & 11 == 00 ==> 4 * (h DIV 4) + 00
h & 11 == 01 ==> 4 * L(h DIV 4) + 10
h & 11 == 10 ==> 4 * L(h DIV 4) + 11
h & 11 == 11 ==> 4 * L(h DIV 4) + 00
R(h) =
h & 11 == 00 ==> 4 * R(h DIV 4) + 11
h & 11 == 01 ==> 4 * (h DIV 4) + 00
h & 11 == 10 ==> 4 * R(h DIV 4) + 01
h & 11 == 11 ==> 4 * R(h DIV 4) + 10
J(h) =
h & 11 == 00 ==> 4 * (h DIV 4) + 10
h & 11 == 01 ==> 4 * J(h DIV 4) + 01
h & 11 == 10 ==> 4 * (h DIV 4) + 00
h & 11 == 11 ==> 4 * J(h DIV 4) + 11
NB. L() en R() zijn elkaars inverse en J() is z'n eigen inverse. |)
NB2. Als je N maal L() (= L(L(L(L(L(...) ) of R() uitvoert voor een htm kom
je op de htm zelf uit, waarbij N samenhangt met het htm level en de
"breedtegraad".
Dit kan razendsnel in C met een loopje en wat shift en bit operaties.
En een 100% PL/SQL implementatie behoort ook tot de mogelijkheden.
"""
commentByHB = """
Een paar aantekeningen:
- Volgens mij gaat het mis op het minst diepe level. Dan heb je maar 8 driehoeken, als een octaeder. Die moet je volgens mij hardcoden.
- Zonder die uitzondering voor level 1 is je NB2 daarom volgens mij niet waar.
- Uit symmetrie overwegingen verwacht ik dat maar 2 van de vier gevallen van L() en R() recursief hoeven te zijn.
"""
import struct
import time
class Bits:
def __init__(self, value):
if isinstance(value, str):
self.value = 0
for c in value:
self.value = 2*self.value + ord(c) - 48
else:
self.value = value
def __str__(self):
n = self.value
b = ''
while n > 0:
b = chr(48+(n&1)) + b
n >>= 1
return b
def __eq__(self, other):
if isinstance(other, Bits):
return self.value == other.value
return self.value == other
def __coerce__(self, other):
return (self.value, other)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment