fractal 0.1.9 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +5 -5
  2. data/bin/fractal +22 -13
  3. data/lib/fractal.rb +19 -18
  4. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d6e9e8b59a32d9c1c60cc4491b890caf44e70f70
4
- data.tar.gz: 7279d76d297eb703f576063289ea06dc7e8ff92d
2
+ SHA256:
3
+ metadata.gz: 0c043fdee5986a21bc328754149982e0435ab815933ad075a653332605e8475a
4
+ data.tar.gz: f76814af1d2f281da912ba797ca7d5db4cbda220f222b2d4caeacf490a4fdcb3
5
5
  SHA512:
6
- metadata.gz: 3a0aa10ad51c5cf18933c07d0d710dbae8cd21a20bd0b08d74829bef48644797ba315997b83bbf99910a147c2143e3e8f16dd2abe807d7df150f1fdad2511b77
7
- data.tar.gz: 9238c025bd4cdeac06d21b1498ddc7677f399f6fc7b7949de04bef0903f93ee6865aa9fd54059d08de53c5e94b854bda506e1ee0c2531b1ff896030662dea47d
6
+ metadata.gz: fd86626a204a0ad115b9a2120835d643d6995c26e94969e48951ef4e3cccc31876dbcc2c07215f0cf7a1d0ed7ec69918b86ca964056682a6e2025631d599fa2e
7
+ data.tar.gz: 20e83dca134b2bc920438a5040c4b9328e269eebecdc2cd7660902b532daa8a43ef902d21401e1e31a74362921f8b2bb4f23db44aa79a071805ba7397574a349
@@ -24,6 +24,13 @@ if args.key? 'help'
24
24
  - `--scale=`, (optional), the zoom level of the image,
25
25
  a higher value corresponds to a taller imaginary number line
26
26
  thus a smaller fractal is seen. e.g. `--scale=2.25`
27
+ - `--offset=x,y` (optional), the offset will make you able
28
+ to position yourself where you like on the plan.
29
+ (offsetting where the centre is, before (0,0) was
30
+ the centre of the image, but now your offset is the centre).
31
+ Make sure you give an x and y value as numerics,
32
+ (ints and floats work both and don't leave any spaces
33
+ between the comma).
27
34
  - `--complex=` (*only needed for the Julia set*)
28
35
  this sets a complex coordinate for the Julia set,
29
36
  in the form of `a±bi` ('a' and 'b' real numbers and
@@ -43,13 +50,13 @@ EOF
43
50
  exit 0
44
51
  end
45
52
 
46
- allowedFractals = ['mandelbrot', 'julia']
47
- fractalType = String.new
53
+ allowed_fractals = ['mandelbrot', 'julia']
54
+ fractal_type = String.new
48
55
 
49
56
  o = String.new
50
57
  ARGV.each do |arg|
51
- allowedFractals.each do |option|
52
- fractalType = arg.downcase if arg.downcase == option
58
+ allowed_fractals.each do |option|
59
+ fractal_type = arg.downcase if arg.downcase == option
53
60
  end
54
61
 
55
62
  o = arg if arg[arg.length - 4, 4].downcase == '.png'
@@ -62,7 +69,7 @@ if o.include? '~'
62
69
  end
63
70
 
64
71
 
65
- if fractalType.empty?
72
+ if fractal_type.empty?
66
73
  puts "Error: Please provide a fractal type.\nType `fractal --help` for help."
67
74
  exit 1
68
75
  end
@@ -85,35 +92,37 @@ if args.key? 'complex'
85
92
  cb = cb.to_f
86
93
  end
87
94
 
88
- if fractalType == 'julia' && (ca.nil? || cb.nil?)
89
- puts "Error: fractal type: '#{fractalType}' requires complex coordinate,\n in form of '±c₁±c₂i', for example: -0.416+0.8i"
95
+ if fractal_type == 'julia' && (ca.nil? || cb.nil?)
96
+ puts "Error: fractal type: '#{fractal_type}' requires complex coordinate,\n in form of '±c₁±c₂i', for example: -0.416+0.8i"
90
97
  exit 1
91
98
  end
92
99
 
93
100
  png = ChunkyPNG::Image.new width, height
94
101
 
95
- case fractalType
102
+ case fractal_type
96
103
  when 'mandelbrot'
97
104
  fractal = Fractals::Mandelbrot.new png
98
105
  when 'julia'
99
106
  fractal = Fractals::Julia.new png
100
107
  fractal.real = ca
101
- fractal.complex = cb
108
+ fractal.imaginary = cb
102
109
  else
103
110
  fractal = Fractals::Mandelbrot.new png
104
111
  end
105
112
 
106
113
 
107
- fractal.colorType = args['color'] if args.key? 'color' # --color=mono
108
- fractal.colorType = args['mode'] if args.key? 'mode' # --mode=mono
114
+ fractal.colouring = args['color'] if args.key? 'color' # --color=mono
115
+ fractal.colouring = args['mode'] if args.key? 'mode' # --mode=mono
109
116
 
110
117
  definition, scale = 255, 2.0
111
118
  definition = args['def'].to_i if args.key? 'def' # --def=100
112
119
  scale = args['scale'].to_f if args.key? 'scale' # --scale=1.5
120
+ offset = [0, 0]
121
+ offset = args['offset'].split(',').map(&:to_f) if args.key? 'offset'
113
122
 
114
123
  unless o.empty?
115
- fractal.draw(definition, scale).save(o)
124
+ fractal.draw(definition, scale, offset).save(o)
116
125
  exit 0
117
126
  end
118
127
 
119
- fractal.draw(definition, scale).save("#{fractalType}-fractal.png")
128
+ fractal.draw(definition, scale, offset).save("#{fractal_type}-fractal.png")
@@ -8,10 +8,8 @@ def drag pos, pos_min, pos_max, out_min, out_max
8
8
  end # drag(x, x_min_val, x_max_val, mapped_to_min_val, mapped_to_max_val), the same as the popular map(...) function.
9
9
 
10
10
  module Fractals
11
- I = Complex 'i'
12
-
13
11
  class Mandelbrot
14
- attr_accessor :colorType
12
+ attr_accessor :colouring
15
13
 
16
14
  def initialize image
17
15
  @width, @height = image.width, image.height
@@ -28,35 +26,35 @@ module Fractals
28
26
  return [a, b]
29
27
  end
30
28
 
31
- def draw definition=255, scale=2.0
29
+ def draw definition=255, scale=2.0, offset=[0,0]
32
30
  scaleWidth = scale
33
31
  scaleHeight = scale.to_f * (@height.to_f / @width.to_f)
34
32
  definition = definition.to_f
35
33
  (0..@width - 1).each do |x|
36
34
  (0..@height - 1).each do |y|
37
- a = ca = drag(x, 0, @width, -scaleWidth, scaleWidth)
38
- b = cb = drag(y, 0, @height, -scaleHeight, scaleHeight)
35
+ a = ca = drag x, 0, @width, -scaleWidth + offset[0], scaleWidth + offset[0]
36
+ b = cb = drag y, 0, @height, -scaleHeight - offset[1], scaleHeight - offset[1]
39
37
 
40
38
  snap = 0
41
39
  while snap < definition
42
- a, b = calculate(a, b, [ca, cb])
40
+ a, b = calculate a, b, [ca, cb]
43
41
  if a * a + b * b > 16
44
42
  break
45
43
  end
46
44
  snap += 1
47
45
  end
48
46
 
49
- case @colorType
47
+ case @colouring
50
48
  when 'multichromatic', 'multi', 'rainbow'
51
49
  brightness = 1
52
50
  brightness = 0 if snap == definition
53
- hue = drag(snap, 0, definition, 0, 1)
54
- hue = drag(Math.sqrt(hue), 0, 1, 0, 360)
51
+ hue = drag snap, 0, definition, 0, 1
52
+ hue = drag (Math.sqrt hue), 0, 1, 0, 360
55
53
 
56
54
  @image[x, y] = ChunkyPNG::Color.from_hsv hue, 1, brightness
57
55
  else
58
- shade = drag(snap, 0, definition, 0, 1)
59
- shade = drag(Math.sqrt(shade), 0, 1, 0, 255)
56
+ shade = drag snap, 0, definition, 0, 1
57
+ shade = drag (Math.sqrt shade), 0, 1, 0, 255
60
58
  r, g, b = [shade.round.to_i] * 3
61
59
 
62
60
  @image[x, y] = ChunkyPNG::Color.rgb r, g, b
@@ -67,17 +65,20 @@ module Fractals
67
65
  end
68
66
  end
69
67
 
70
- class Julia < Mandelbrot # Since the Julia set only has a slightly modified calculation
68
+ class Julia < Mandelbrot
69
+ # Since the Julia set only has a slightly modified calculation
71
70
  attr_accessor :real
72
- attr_accessor :complex
71
+ attr_accessor :imaginary
73
72
 
74
- def calculate a, b, c_arr # c_arr is irrelevant as c is now constant, however the draw() still supplies it and I don't want to rewrite draw when it already exists.
73
+ def calculate a, b, c_arr
74
+ # c_arr is irrelevant as c is now constant,
75
+ # however the #draw() still supplies it and
76
+ # I don't want to rewrite draw when it already exists.
75
77
  left = a * a - b * b
76
78
  right = 2 * a * b
77
- a = left + @real # z^2 + c
78
- b = right + @complex # but here the c is constant, composed of a real and imaginary part in form of a±bi where a and b have been separated and labeled here as real and complex
79
+ a = left + @real # z^2 + c
80
+ b = right + @imaginary
79
81
  return [a, b]
80
82
  end
81
83
  end
82
- # module space
83
84
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fractal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Demonstrandum
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-13 00:00:00.000000000 Z
11
+ date: 2018-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chunky_png
@@ -30,7 +30,7 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.3.8
33
- description: Creates PNG images of fractals.
33
+ description: Creates PNG images of complex plane fractals.
34
34
  email: knutsen@jetspace.co
35
35
  executables:
36
36
  - fractal
@@ -59,7 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
59
  version: '0'
60
60
  requirements: []
61
61
  rubyforge_project:
62
- rubygems_version: 2.6.11
62
+ rubygems_version: 2.7.3
63
63
  signing_key:
64
64
  specification_version: 4
65
65
  summary: Draws fractal PNG images.