mirror of
https://github.com/mistergibson/gxg-web-client.git
synced 2026-08-15 03:26:00 -07:00
59 lines
1 KiB
Ruby
59 lines
1 KiB
Ruby
class String
|
|
class Complexifier
|
|
def initialize(value)
|
|
@value = value
|
|
end
|
|
|
|
private :initialize
|
|
|
|
def convert
|
|
if m = PATTERN0.match(@value)
|
|
sr = m[1]
|
|
si = m[2]
|
|
re = m.post_match
|
|
po = true
|
|
elsif m = PATTERN1.match(@value)
|
|
sr = nil
|
|
si = (m[1] || "") + (m[2] || "1")
|
|
re = m.post_match
|
|
po = false
|
|
elsif m = PATTERN2.match(@value)
|
|
sr = m[1]
|
|
si = m[2] ? m[3] + (m[4] || "1") : nil
|
|
re = m.post_match
|
|
po = false
|
|
else
|
|
return Complex.new(0, 0)
|
|
end
|
|
|
|
r = 0
|
|
i = 0
|
|
|
|
if sr
|
|
if sr.include?("/")
|
|
r = sr.to_r
|
|
elsif sr.match(/[.eE]/)
|
|
r = sr.to_f
|
|
else
|
|
r = sr.to_i
|
|
end
|
|
end
|
|
|
|
if si
|
|
if si.include?("/")
|
|
i = si.to_r
|
|
elsif si.match(/[.eE]/)
|
|
i = si.to_f
|
|
else
|
|
i = si.to_i
|
|
end
|
|
end
|
|
|
|
if po
|
|
Complex.polar(r, i)
|
|
else
|
|
Complex.rect(r, i)
|
|
end
|
|
end
|
|
end
|
|
end
|