This geometry project was designed to be an exercise in rigid motion. There are three types of rigid motion: translation, rotation, and reflection, and Symmetry in (Programmed) Motion required that I create a kaleidoscope with all three types. Translation is a movement (or glide) from one point to another, along a vector. Rotation is a translation along an arc with its center at the point of rotation, measured in degrees. Reflection of a point is the creation of a new point on the other side of a line of reflection, with the same distance from the line as the original point. A kaleidoscope is a figure or image with multiple symmetric lines; the kaleidoscope as a children's toy uses multiple colored shapes and mirrors to create kaleidoscopic images.
The project made use of an intuitive visual programming software called Starlogo TNG. In Starlogo, one can drag and drop commands onto a canvas in order to cause agents to execute specific movements on a cartesian plane called "Spaceland." For example, in a translation, one might set the direction with a "turn _ degrees right/left" block, or a "turn towards (_,_)" block, and then cause the agent to move with a "forward _ steps" block. One can work with an agent's x- and y-coordinates as well (ranging from -50 to 50), so that it can teleport to a certain point or use its current coordinates for computations. Starlogo is similar to most other visual programming environments, in that there are global and local variables. In this case, there are global variables, which can be used for everyone or for all agents of a certain breed, or agent variables, which are defined separately for each agent. An agent's x- and y-coordinates, for example, are agent variables.
My kaleidoscope concept did not change much in principle from the project's beginning to its end. Originally, I had wanted to have an agent setting random coordinates and creating hills, another agent orbiting around it, and still another agent moving from the top to the bottom of its section repeatedly, and have all of those motions reflected in the kaleidoscope's other sectors. I kept the ideas of the random hills and the orbiting agents; the only change that I made at the end was to change the motion of the third agent so that, rather than moving from the top to the bottom, it radiated outwards from the origin. However, I went through a rather rigorous learning process, in which I learned how to use variables, how to move an agent to create shapes, and how to create rotation, translation, and reflection, and after I was finished with these benchmarks, I had radically changed how I was planning on programming my kaleidoscope.
My final program caused the hill agent, when it changed coordinates, to move to the origin, set a random heading, and move a random distance outwards, rather than simply using the "set x/y" block, which would have required complicated calculations. This agent used variables to determine when and where to move. The orbiting agent moved on a circular path around its hill, used those same variables to move when its hill did, and calculated its new position based upon the x/y coordinates of its own hill agent and where it was in its rotation when it moved. This is an excellent example of rotation. The third agent, called "radium" for no real reason, had a very simple motion, and used variables to determine when to change headings and when to reset its x/y coordinates to the origin. There are other examples of translation in my kaleidoscope, but this is the best.
Symmetry occurs in a shape or image when a line can be drawn dividing the image, and the two halves are perfect reflections. As shown in the images below, taken as a top view, each sector is a perfect reflection of its adjacent sectors, meaning that each red line is actually a line of symmetry for my kaleidoscope. This demonstrates reflection in my kaleidoscope. (Unfortunately, Weebly has cut off the very tops and bottoms of my images, but they are symmetrical.)
The project made use of an intuitive visual programming software called Starlogo TNG. In Starlogo, one can drag and drop commands onto a canvas in order to cause agents to execute specific movements on a cartesian plane called "Spaceland." For example, in a translation, one might set the direction with a "turn _ degrees right/left" block, or a "turn towards (_,_)" block, and then cause the agent to move with a "forward _ steps" block. One can work with an agent's x- and y-coordinates as well (ranging from -50 to 50), so that it can teleport to a certain point or use its current coordinates for computations. Starlogo is similar to most other visual programming environments, in that there are global and local variables. In this case, there are global variables, which can be used for everyone or for all agents of a certain breed, or agent variables, which are defined separately for each agent. An agent's x- and y-coordinates, for example, are agent variables.
My kaleidoscope concept did not change much in principle from the project's beginning to its end. Originally, I had wanted to have an agent setting random coordinates and creating hills, another agent orbiting around it, and still another agent moving from the top to the bottom of its section repeatedly, and have all of those motions reflected in the kaleidoscope's other sectors. I kept the ideas of the random hills and the orbiting agents; the only change that I made at the end was to change the motion of the third agent so that, rather than moving from the top to the bottom, it radiated outwards from the origin. However, I went through a rather rigorous learning process, in which I learned how to use variables, how to move an agent to create shapes, and how to create rotation, translation, and reflection, and after I was finished with these benchmarks, I had radically changed how I was planning on programming my kaleidoscope.
My final program caused the hill agent, when it changed coordinates, to move to the origin, set a random heading, and move a random distance outwards, rather than simply using the "set x/y" block, which would have required complicated calculations. This agent used variables to determine when and where to move. The orbiting agent moved on a circular path around its hill, used those same variables to move when its hill did, and calculated its new position based upon the x/y coordinates of its own hill agent and where it was in its rotation when it moved. This is an excellent example of rotation. The third agent, called "radium" for no real reason, had a very simple motion, and used variables to determine when to change headings and when to reset its x/y coordinates to the origin. There are other examples of translation in my kaleidoscope, but this is the best.
Symmetry occurs in a shape or image when a line can be drawn dividing the image, and the two halves are perfect reflections. As shown in the images below, taken as a top view, each sector is a perfect reflection of its adjacent sectors, meaning that each red line is actually a line of symmetry for my kaleidoscope. This demonstrates reflection in my kaleidoscope. (Unfortunately, Weebly has cut off the very tops and bottoms of my images, but they are symmetrical.)
In my original kaleidoscope, since there were three agents per sector and six sectors, I actually had 18 different breeds so that I could program each individually. As one might imagine, this created a program file of extreme size; I was halfway through my kaleidoscope, and Starlogo was running lagging dangerously. I predicted, and still believe, that if I had finished that program, my computer would have been unable to open it without crashing. Fortunately, Dr. Vernon was able to show me another way of programming my kaleidoscope so that I had only three breeds and six agents of each breed. I hadn't realized that one could program each agent individually, but Dr. Vernon showed me how to do so, and I was able to create my kaleidoscope without crashing my computer.
Apart from that incident, though, I had a great time with Starlogo. I already had extensive experience with a similar visual programming environment called Scratch Animation (although unfortunately I have not yet learned how to write code), so I picked up on Starlogo relatively quickly. I was normally done with my benchmarks ahead of time, which allowed me to take them further. For my 4th benchmark, which was a demonstration of reflection, I experimented with random motion to make my agents move forward, turn randomly, and draw lines of a random color, and I actually created something that I probably could have turned in, with a bit of tweaking, as a kaleidoscope. The Symmetry in (Programmed) Motion project turned out to be one of the most fun projects I have taken part in this year.
Apart from that incident, though, I had a great time with Starlogo. I already had extensive experience with a similar visual programming environment called Scratch Animation (although unfortunately I have not yet learned how to write code), so I picked up on Starlogo relatively quickly. I was normally done with my benchmarks ahead of time, which allowed me to take them further. For my 4th benchmark, which was a demonstration of reflection, I experimented with random motion to make my agents move forward, turn randomly, and draw lines of a random color, and I actually created something that I probably could have turned in, with a bit of tweaking, as a kaleidoscope. The Symmetry in (Programmed) Motion project turned out to be one of the most fun projects I have taken part in this year.