This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Using Complex Numbers | ||
|---|---|---|
| Code | Expected | Actual |
require 'complex' Complex::I |
Complex(0, 1) | Complex(0, 1) |
a = Complex(1, 4) |
Complex(1, 4) | Complex(1, 4) |
a.real |
1 | 1 |
a.image |
4 | 4 |
b = Complex(1.5, 4.25) |
Complex(1.5, 4.25) | Complex(1.5, 4.25) |
b + 1.5 |
Complex(3.0, 4.25) | Complex(3.0, 4.25) |
b + 1.5*Complex::I |
Complex(1.5, 5.75) | Complex(1.5, 5.75) |
a - b |
Complex(-0.5, -0.25) | Complex(-0.5, -0.25) |
a * b |
Complex(-15.5, 10.25) | Complex(-15.5, 10.25) |
b.conjugate |
Complex(1.5, -4.25) | Complex(1.5, -4.25) |
Math::sin(b) |
Complex(34.9720129257216, 2.47902583958724) | Complex(34.9720129257216, 2.47902583958724) |
class Mandelbrot
# Set up the Mandelbrot generator with the basic parameters for
# deciding whether or not a point is in the set.
def initialize(bailout=10, iterations=100)
@bailout, @iterations = bailout, iterations
end
# Performs the Mandelbrot operation @iterations times. If the
# result exceeds @bailout, assume this point goes to infinity and
# is not in the set. Otherwise, assume it is in the set.
def mandelbrot(x, y)
c = Complex(x, y)
z = 0
@iterations.times do |i|
z = z**2 + c # This is the Mandelbrot operation.
return false if z > @bailout
end
return true
end
def render(x_size=80, y_size=24, inside_set="*", outside_set=" ")
0.upto(y_size) do |y|
0.upto(x_size) do |x|
scaled_x = -2 + (3 * x / x_size.to_f)
scaled_y = 1 + (-2 * y / y_size.to_f)
print mandelbrot(scaled_x, scaled_y) ? inside_set : outside_set
end
puts
end
end
end
Mandelbrot.new.render(25, 10) |
** **** ******** *** ********* ******************* *** ********* ******** **** ** |
**
****
********
*** *********
*******************
*** *********
********
****
** |