Hope this isn’t too fragmentary and of no use
Here is where I create class for generating 2D arrays
class Array2D
require ‘matrix’
def initialize(row, column) #this creates the 2D array structure
@data = Array.new(row) { Array.new(column) {0}} #initialize
array with
#0’s
end
def [](x, y) #this allows one read access to cells within 2D array
@data[x][y]
end
def []=(x, y, value) #this allows one write access to cells within 2D
array
@data[x][y] = value
end
end
In a separate class, ExteriorBallistics, in its method “calculate,” I
create a new array component
nrows = ((los_rng - start_rng)/rng_incr).round
initialize arrays
e = Array2D.new(nrows+1, 14)
Later I assign to the matrix e. Putting puts in front of any of these
assignments yields correct column values
Store Values at appropriate intervals (integral numbers of RangeInc)
if ((range_ctr % rng_incr == 0)||(range_ctr == los_rng ))
@index = (((rng_incr + range2 - start_rng)/rng_incr) - 1).ceil
e[@index,RANGE] = range2
e[@index,VELOCITY] = vel
e[@index,TIME] = time1
e[@index,PATH] = height1 * 12 # %path, converted to
inches
e[@index,DEFLECTION] = deflection1 * 12 # %convert to inches
e[@index,ENERGY] = energy
e[@index,DROP] = drop
e[@index,MOA] = moa
e[@index,ADJ_PATH] = adj_path
e[@index,EQV_DROP] = eqv_drop
e[@index,MOMENTUM] = momentum
e[@index,TAYLOR_KO] = taylor_ko
e[@index,OGW] = optimal_game_weight
end # if (range_ctr % rng_incr == 0)
@index gives me the column length once the entire routine is complete.
Towards the end of the “calculate” method, once all elements have been
assigned to the matrix, I make the following association
@data_array = e
Furthermore, under the same class ExteriorBallistics, I declare an
attr_accessor :data_array
Then I want to run calculate via
ExteriorBallistics.new do
{a bunch of assignments here}
calculate
ary_length = @index #returns the correct column length
puts @data_array
This returns the Array ID.
I can do a .inspect to have the entire matrix printed out in string
format, but I really want column numeric values.
Strangely, if I do either this @data_array[0…ary_length,0] or this
@data_array[0,0…ary_length], I get the exact same result, which is the
first ROW spanning all columns that I created.