Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Hugo Buddelmeijer
htmadness
Commits
88d6e406
Commit
88d6e406
authored
Feb 20, 2012
by
Hugo Buddelmeijer
Browse files
Proof-of-concept script on how the idea of HTM trixels can be improved.
parent
5e6c9de7
Changes
1
Hide whitespace changes
Inline
Side-by-side
bettertrixels.py
0 → 100644
View file @
88d6e406
"""
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
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment