diff --git a/causal/causal.rb b/causal/causal.rb new file mode 100755 index 0000000..f25337e --- /dev/null +++ b/causal/causal.rb @@ -0,0 +1,178 @@ +#!/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