61 lines
1.1 KiB
CoffeeScript
61 lines
1.1 KiB
CoffeeScript
# create an immutable Complex type
|
|
class Complex
|
|
constructor: (@r=0, @i=0) ->
|
|
@magnitude = @r*@r + @i*@i
|
|
|
|
plus: (c2) ->
|
|
new Complex(
|
|
@r + c2.r,
|
|
@i + c2.i
|
|
)
|
|
|
|
times: (c2) ->
|
|
new Complex(
|
|
@r*c2.r - @i*c2.i,
|
|
@r*c2.i + @i*c2.r
|
|
)
|
|
|
|
negation: ->
|
|
new Complex(
|
|
-1 * @r,
|
|
-1 * @i
|
|
)
|
|
|
|
inverse: ->
|
|
throw Error "no inverse" if @magnitude is 0
|
|
new Complex(
|
|
@r / @magnitude,
|
|
-1 * @i / @magnitude
|
|
)
|
|
|
|
toString: ->
|
|
return "#{@r}" if @i == 0
|
|
return "#{@i}i" if @r == 0
|
|
if @i > 0
|
|
"#{@r} + #{@i}i"
|
|
else
|
|
"#{@r} - #{-1 * @i}i"
|
|
|
|
# test
|
|
do ->
|
|
a = new Complex(5, 3)
|
|
b = new Complex(4, -3)
|
|
|
|
sum = a.plus b
|
|
console.log "(#{a}) + (#{b}) = #{sum}"
|
|
|
|
product = a.times b
|
|
console.log "(#{a}) * (#{b}) = #{product}"
|
|
|
|
negation = b.negation()
|
|
console.log "-1 * (#{b}) = #{negation}"
|
|
|
|
diff = a.plus negation
|
|
console.log "(#{a}) - (#{b}) = #{diff}"
|
|
|
|
inverse = b.inverse()
|
|
console.log "1 / (#{b}) = #{inverse}"
|
|
|
|
quotient = product.times inverse
|
|
console.log "(#{product}) / (#{b}) = #{quotient}"
|