#!/usr/bin/ruby # $Id: ruby 1708 2006-02-24 10:09:22Z ward $ # $URL$ # # Copyright (c) 2006 Ward Wouts # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # j1 = Array.new j2 = Array.new j3 = Array.new j4 = Array.new class Juggler attr_writer :juggler attr_writer :color attr_writer :nodecolor attr_writer :offset def initialize @hands = [ "R", "L" ] @juggler = 0 @offset = 0 @throws = Array.new @starthand = "R" end def draw (0..@throws.length).each{|x| drawnode(x) #p "#{x} #{@throws[x]}" if @throws[x].nil? next end if @throws[x].match(/p/) drawpass(x) else drawself(x) end } end def drawnode(n) puts "\\pscircle#{@nodecolor ? "[linecolor=#{@nodecolor}]" : ""}(#{(n*2+0.5+@offset*2)},-#{@juggler*2+1}){0.4}" if @color puts "\\rput(#{(n*2+0.5+@offset*2)},-#{@juggler*2+1}){{\\color{#{@color}}#{@hands[n.modulo(2)]}}}" else puts "\\rput(#{(n*2+0.5+@offset*2)},-#{@juggler*2+1}){#{@hands[n.modulo(2)]}}" end end def drawself(n) case @throws[n].to_f when 0 then puts "0" when 1 then puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2-0.1+@offset*2},-#{@juggler*2+1})(#{(n*2)-0.9+@offset*2},-#{@juggler*2+1}) % self j#{@juggler+1}" when 2 then if @juggler == 0 puts "\\psecurve#{@color ? "[linecolor=#{@color}]" : ""}{->}" + "(#{n*2+0.5+@offset*2},-#{@juggler*2+1})" + "(#{n*2+0.1+@offset*2},-#{@juggler*2+0.6})" + "(#{n*2-0.1+@offset*2},-#{@juggler*2+0.4})" + "(#{n*2+0.5+@offset*2},-#{@juggler*2+0.1})" + "(#{n*2+1.1+@offset*2},-#{@juggler*2+0.4})" + "(#{n*2+0.9+@offset*2},-#{@juggler*2+0.6})" + "(#{n*2+0.5+@offset*2},-#{@juggler*2+1})" else puts "\\psecurve#{@color ? "[linecolor=#{@color}]" : ""}{->}" + "(#{n*2+0.5+@offset*2},-#{@juggler*2+1})" + "(#{n*2+0.1+@offset*2},-#{@juggler*2+1.4})" + "(#{n*2-0.1+@offset*2},-#{@juggler*2+1.6})" + "(#{n*2+0.5+@offset*2},-#{@juggler*2+1.9})" + "(#{n*2+1.1+@offset*2},-#{@juggler*2+1.6})" + "(#{n*2+0.9+@offset*2},-#{@juggler*2+1.4})" + "(#{n*2+0.5+@offset*2},-#{@juggler*2+1})" end when 3 then puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+1.1+@offset*2},-#{@juggler*2+1})(#{(n*2)+1.9+@offset*2},-#{@juggler*2+1}) % self j#{@juggler+1}" when 4 then if @juggler == 0 puts "\\pscurve#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-0.6)(#{n*2+2.5},-0.4)(#{n*2+4.1+@offset*2},-0.6) % double self j#{@juggler+1}" else puts "\\pscurve#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-#{@juggler*2+1.4})(#{n*2+2.5+@offset*2},-#{@juggler*2+1.6})(#{n*2+4.1+@offset*2},-#{@juggler*2+1.4}) % double self j#{@juggler+1}" end when 5 if @juggler == 0 puts "\\pscurve#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-0.6)(#{n*2+3.5},-0.2)(#{n*2+6.1+@offset*2},-0.6) % triple self j#{@juggler+1}" else puts "\\pscurve#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-#{@juggler*2+1.4})(#{n*2+3.5+@offset*2},-#{@juggler*2+1.8})(#{n*2+6.1},-#{@juggler*2+1.4}) % triple self j#{@juggler+1}" end when 6 if @juggler == 0 puts "\\pscurve#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-0.6)(#{n*2+4.5},0)(#{n*2+8.1+@offset*2},-0.6) % quad self j#{@juggler+1}" else puts "\\pscurve#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-#{@juggler*2+1.4})(#{n*2+4.5+@offset*2},-#{@juggler*2+2})(#{n*2+8.1},-#{@juggler*2+1.4}) % quad self j#{@juggler+1}" end end end def drawpass(n, to=nil) if @juggler == 0 and to.nil? to = 1 elsif to.nil? to = @juggler - 1 end case @throws[n] when "3p" then if to > @juggler puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9},-#{@juggler*2+1.4})(#{n*2+2.1},-#{@juggler*2+2.6}) % single pass j#{@juggler+1}" else puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9},-#{@juggler*2+0.6})(#{n*2+2.1},-#{@juggler*2-0.6}) % single pass j#{@juggler+1}" end when "3.5p" then if to > @juggler puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-#{@juggler*2+1.4})(#{n*2+3.1+@offset*2},-#{@juggler*2+2.6}) % single pass j#{@juggler+1}" else puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-#{@juggler*2+0.6})(#{n*2+3.1+@offset*2},-#{@juggler*2-0.6}) % single pass j#{@juggler+1}" end when "4p" then if to > @juggler puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-#{@juggler*2+1.4})(#{n*2+4.1+@offset*2},-#{@juggler*2+2.6}) % double pass j#{@juggler+1}" else puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-#{@juggler*2+0.6})(#{n*2+4.1+@offset*2},-#{@juggler*2-0.6}) % double pass j#{@juggler+1}" end when "4.5p" then if to > @juggler puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-#{@juggler*2+1.4})(#{n*2+5.1+@offset*2},-#{@juggler*2+2.6}) % double pass j#{@juggler+1}" else puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9+@offset*2},-#{@juggler*2+0.6})(#{n*2+5.1+@offset*2},-#{@juggler*2-0.6}) % double pass j#{@juggler+1}" end when "5p" then if to > @juggler puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9},-#{@juggler*2+1.4})(#{n*2+6.1},-#{@juggler*2+2.6}) % triple pass j#{@juggler+1}" else puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9},-#{@juggler*2+0.6})(#{n*2+6.1},-#{@juggler*2-0.6}) % triple pass j#{@juggler+1}" end when "6p" then if to > @juggler puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9},-#{@juggler*2+1.4})(#{n*2+8.1},-#{@juggler*2+2.6}) % quad pass j#{@juggler+1}" else puts "\\psline#{@color ? "[linecolor=#{@color}]" : ""}{->}(#{n*2+0.9},-#{@juggler*2+0.6})(#{n*2+8.1},-#{@juggler*2-0.6}) % quad pass j#{@juggler+1}" end end end def pattern=(pat) @throws = pat.split(/ /) end end class Jugglers end j1 = Juggler.new #j1.pattern="4p 4 4 4p 4 4 4p" # 94674 start 67494 j1.pattern="3 3.5p 2 4.5p 2 3 3.5p 2 4.5p 2" #j1.color = "darkgray" #j1.nodecolor = "darkgray" j1.draw j2 = Juggler.new j2.juggler = 1 #j2.pattern="4p 4 4 4p 4 4 4p" # 98274 start 27498 j2.offset = 0.5 j2.pattern="4.5p 4 1 3.5p 2 4.5p 4 1 3.5p 2" j2.draw