Skip to content

Commit 3395016

Browse files
committed
some extra contructors for conversion from Rational
1 parent 43b556b commit 3395016

File tree

3 files changed

+21
-19
lines changed

3 files changed

+21
-19
lines changed

src/Mandelbrot.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module Mandelbrot
22
include("trees/ShowTree.jl")
33

4+
export RationalAngle
5+
export BinaryExpansion
46
export KneadingSequence
57

68
export InternalAddress
@@ -9,8 +11,6 @@ export HubbardTree
911
export AngledInternalAddress
1012
export OrientedHubbardTree
1113

12-
export RationalAngle
13-
1414
export parameter
1515

1616
#export HyperbolicComponent

src/sequences/AngleDoubling.jl

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ struct RationalAngle <: Number
1414
end
1515
end
1616

17-
import Base: +, *, /, <, >, numerator, denominator
17+
import Base: +, *, /, <, >, numerator, denominator, convert
1818

1919
phi::RationalAngle + theta::RationalAngle = RationalAngle(mod(phi.value+theta.value,1))
2020
theta::RationalAngle * s::Number = RationalAngle(mod(theta.value*s,1))
@@ -66,6 +66,10 @@ function KneadingSequence(angle::RationalAngle)
6666
return thetaitinerary(angle,orb)
6767
end
6868

69+
function KneadingSequence(theta::Rational)
70+
return KneadingSequence(RationalAngle(theta))
71+
end
72+
6973
function thetaitinerary(theta::RationalAngle,angle::RationalAngle)
7074
return thetaitinerary(theta,orbit(angle))
7175
end
@@ -90,16 +94,7 @@ function thetaitinerary(theta::RationalAngle,orb::Sequence)
9094
return Sequence{KneadingSymbol}(itinerary,orb.preperiod)
9195
end
9296

93-
function Base.show(io::IO, K::KneadingSequence)
94-
str = join([repr(item) for item in K.items])
95-
L = K.preperiod
96-
if L == 0
97-
return println(io,"|"*str*"|")
98-
else
99-
return println(io,str[1:L]*"|"*str[L+1:end]*"|")
100-
end
101-
end
102-
97+
"""An internal address is an increasing sequence of integers which describes a kneading sequence"""
10398
struct InternalAddress
10499
addr::Vector{Int}
105100
end
@@ -198,6 +193,7 @@ function admissible(intadd::InternalAddress)
198193
return admissible(KneadingSequence(intadd))
199194
end
200195

196+
"""an internal address with aditional information in the form of angles which specify a cyclic ordering of kneading sequences"""
201197
struct AngledInternalAddress
202198
addr::Vector{Int}
203199
angles::Vector{RationalAngle}
@@ -223,6 +219,10 @@ function AngledInternalAddress(theta::RationalAngle)
223219

224220
end
225221

222+
function AngledInternalAddress(theta::Rational)
223+
return AngledInternalAddress(Rationalangle(theta))
224+
end
225+
226226
function firstaddress(intadd::Vector{Int})
227227
d = denominators(intadd)
228228
angles = [1//x for x in d]
@@ -357,13 +357,15 @@ Base.Int(d::Digit) = d.value
357357

358358
const BinaryExpansion = Sequence{Digit{2}}
359359

360+
""" The binary expansion of an angle is a sequence of 1s and 0s which can be interpreted either as place-value representation of the angle, or as an itinerary of the angle under angle doubling.
361+
"""
360362
function BinaryExpansion(theta::RationalAngle)
361363
orb = orbit(theta)
362364
itinerary = Digit{2}[]
363365
zero = Digit{2}(0)
364366
one = Digit{2}(1)
365367
for theta in orb.items
366-
if theta < 1//2
368+
if theta < RationalAngle(1//2)
367369
push!(itinerary,zero)
368370
else
369371
push!(itinerary,one)

src/sequences/Sequences.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,13 @@ function Base.hash(S::Sequence,h::UInt)
7171
return hash(h,hash(:Sequence,k))
7272
end
7373

74-
function Base.show(io::IO, s::Sequence{Char})
75-
str = String(s.items)
76-
L = s.preperiod
74+
function Base.show(io::IO, K::Sequence)
75+
str = join([repr(item) for item in K.items])
76+
L = K.preperiod
7777
if L == 0
78-
return print(io,"|"*str*"|")
78+
return println(io,"|"*str*"|")
7979
else
80-
return print(io,str[1:L]*"|"*str[L+1:end]*"|")
80+
return println(io,str[1:L]*"|"*str[L+1:end]*"|")
8181
end
8282
end
8383

0 commit comments

Comments
 (0)