Method: Geometry::Rotation#initialize
- Defined in:
- lib/aurora-geometry/rotation.rb
#initialize(options = {}) ⇒ Rotation
Returns a new instance of Rotation.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/aurora-geometry/rotation.rb', line 41 def initialize(*args) , args = args.partition {|a| a.is_a? Hash} = .reduce({}, :merge) @dimensions = [:dimensions] || nil = [[:x], [:y], [:z]] = [[:x], [:y], [:z]].select {|a| a} if .count != 0 @x = [:x] || nil @y = [:y] || nil @z = [:z] || nil raise ArgumentError, "All axis options must be Vectors" unless .all? {|a| a.is_a?(Vector) or a.is_a?(Array) } raise ArgumentError, "All provided axes must be the same size" unless .all? {|a| a.size == .first.size} @dimensions ||= .first.size raise ArgumentError, "Dimensionality mismatch" unless .first.size <= @dimensions if .first.size < @dimensions @x, @y, @z = [@x, @y, @z].map {|a| (a && (a.size != 0) && (a.size < @dimensions)) ? Array.new(@dimensions) {|i| a[i] || 0 } : a } end raise ArgumentError, "Too many axes specified (expected #{@dimensions - 1} but got #{.size}" unless .size == (@dimensions - 1) end end |