fractal 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.