#!/usr/bin/ruby1.8 -Ku # -*- mode: ruby; coding: utf-8-unix -*- def split_seg(ary, v0, v1) r = [(v1[0]-v0[0])/3.0,(v1[1]-v0[1])/3.0] [2,1].each do |i| ary.push [v0[0] + r[0]*i, v0[1] + r[1]*i] end end def split_iter(vs) n = vs.length segs = vs.zip(vs[-1,1]+vs[0,n-1]) new_vs = [] segs.each do |v0,v1| split_seg(new_vs, v0, v1) end return new_vs end vs = [] vs.push [ 1.0, 1.0] vs.push [-1.0, 1.0] vs.push [-1.0,-1.0] vs.push [ 1.0,-1.0] (0..(17-1)).each do |i| STDERR.printf "cnt: %d\n", i new_vs = split_iter(vs) vs = new_vs end STDERR.printf "sorting...\n" ws = vs.collect do |x,y| r = Math.sqrt(x*x+y*y) t = Math.atan2(y,x) [t,r,x,y] end ws.sort!{|a,b| a[0]<=>b[0]} ws.each do |t,r,x,y| printf "%.10e %.10e %.10e %.10e\n", t/Math::PI*256.0, r, x, y end # Local Variables: # ruby-indent-level: 3 # End: