#!/usr/bin/env ruby # get number of rows and number of clusters NUM_ROWS = (ARGV.shift || 1000).to_i NUM_CLUSTERS = (ARGV.shift || 4).to_i # data shape (num_floats, num_ints) SHAPE = [2, 0] # cluster centers Q = [ [-1, -1], [-1, +1], [+1, -1], [+1, +1], [0, 0], [-1, 0], [0, +1], [0, -1], [+1, 0], ].map { |c| c.map { |v| 0.5 + 0.25 * v } } def noise(y, x, scale) Q[y % NUM_CLUSTERS][x] + scale * rand * Math.cos(Math::PI * rand) end # print output puts [SHAPE.join(' ')] + NUM_ROWS.times.map { |y| SHAPE.first.times.map { |x| '%1.5f' % [noise(y, x, 0.1)] }.join(' ') }