Jugit Data File Generation Code, 10 January 1995 Dave Blumenthal jugit@skyjuggler.com All files in this collection are Copyright (c) 1994-1996 David S. Blumenthal. Free electronic distribution of this collection, unmodified and in its entirety, is permitted. Educational use of this software is permitted. Commercial use of any file in this collection and use for profit of any file in this collection are strictly prohibited without written consent of the author. All other rights are reserved. Introduction ------------ This application is designed to output data files for use with the Jugit virtual juggling system. The output files are readable by the Microcosm rendering software, which probably isn't available anywhere anymore, however its successor is Hypercosm, Inc. (which is now out of business). Basically, this is a juggling simulator based on a relaxed form of the siteswap juggling notation. It can deal with any number of jugglers each juggling any number of objects. It outputs the location and orientation of each ball and hand at each frame or time step. The number of frames and the frame rate, as well as several other parameters, are configurable. Some History ------------ Tom Rutledge (gulfie@yar.cs.wisc.edu) and I began working on this project on 24 March 1994. The idea was to take juggling simulation and apply ray traced graphics, and come up with some really spectacular juggling animations. Tom worked on the graphics side, while I wrote this program to take care of the simulation and physics. That lead into some test animations, and eventually to a 2800+ frame video that we did over the summer of 1994 with the Undergraduate Projects Lab in the Computer Sciences department of the University of Wisconsin - Madison. Since then, I completed an animation involving a juggling machine manipulating five identical but smaller replicas of itself, each doing the same recursively. Siteswap -------- Siteswap is a mathematical juggling notation covering a certain set of patterns. Siteswap deals specifically with how long balls (or other objects) stay in the air. The basic model is this: Say you have 2 hands, and you are alternating throws from one hand, then the other hand, then the first, and so on. Each time you throw a ball, it goes into the air, lands in one of the two hands (hopefully) some amout of time later, and is thrown again. Each time you throw is a time step. Siteswap is a list of numbers, one per throw, saying how many time steps later the ball being thrown will be thrown again. Example: the siteswap "3" says that each time you throw a ball, it will be thrown again 3 time steps later. So, the ball is in the air for 2 time steps, until it is caught in the hand opposite the one that threw it. It is thrown again the next time step. For a better and more complete description of siteswap, see the references below. How to Compile -------------- The only interesting thing about compiling jugit is that the pattern and parameters are all contained in the patterns.C file. You will notice that there is no patterns.C file, but a lot of patterns.C.* files. You will either have to rename or symlink one of the latter to the former. Then futz with the Makefile until it works. Bugs ---- For reasons either not understood or not worth fixing (I don't remember which), jugit will drop balls if the siteswap patterns have odd lengths. So, just "double the recipe" and make any odd length patterns even length. Warnings/Apologies ------------------ This was my first C++ program, so there are some things, like using virtual functions in certain classes, that aren't done right. Also, this program is incomplete. I only coded the parts that were needed for the things we were doing. Juggler rotation, for example, is absent, and there are no subclassed jugglers or props. Also the method of specifying the juggling pattern and parameters leaves much to be desired, e.g. you need to recompile every time you change the pattern, and you can't specify passes even though the program internals support them. That was what JIL (the Juggler Imaging Language) was supposed to be for, but we didn't need it enough to justify the time it would have taken to make it work. References ---------- Current jugit status http://skyjuggler.com/jugit/ Juggler Information Service http://www.juggling.org/ Siteswap Information http://www.juggling.org/help/siteswap Undergraduate Projects Lab http://www.upl.cs.wisc.edu/ That's it. I can't think of anything else that needs to be said here, so good luck, happy juggling, and send me a note if you have any comments. Cheers, -Dave Blumenthal