Editor's Note: This file was selected as MATLAB Central Pick of the Week
Syntax: SpirographGUI;
SpirographGUI();
Dependencies: Make sure you add the folder "./HelperFcns/" to your MATLAB
path before running SpirographGUI(). This folder contains
helper functions that are called during execution
Description: This function generates a GUI in a MATLAB figure window
that allows the user to draw customizable multi-layer
spirographs
Controls: Controls are broken into three button groups: Shapes,
Figure, and Spirograph
The Shapes button group allows the user to select from a
list of available inner/outer shapes and customize their
parameters, including the ability to 1) modify the
positions of the holes in the inner shape, 2) change the
active hole, and 3) show/hide the shapes (e.g., you may
want to hide the shapes to view your finished spirograph!)
The Figure button group allows the user to 1) rotate
layer(s) of the existing spirograph, 2) delete layer(s) of
the existing spirograph, and 3) change the current axis
range
The Spirograph button group allows the user to customize
the 1) initial angle, 2) number of revolutions, 3) graph
resolution, and 4) plotting style (e.g., line color, line
width, etc.) of the next spirograph layer. After
customizing the layer, simply push the "Draw" button to
watch your spirograph draw itself (you can then push "Stop"
to terminate the drawing early, if desired)
Author: Brian Moore
brimoor@umich.edu
Brian Moore (2021). Spirograph GUI (https://www.mathworks.com/matlabcentral/fileexchange/42173-spirograph-gui), MATLAB Central File Exchange. Retrieved .
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Create scripts with code, output, and formatted text in a single executable document.
Great! Only I'd like to close the plotted line (if the geometric given parameters allow this). Where can I act on the code to get this? Thanks.
This is great! I had totally forgotten about spirograph, had one when I was a kid. Nice implementation in MATLAB and fun to play around with :)
@Jean Bilheux: The algorithm is pretty simple: move a small arc length, say ds, along the border of each shape and then rotate/translate the inner shape as necessary to align the tangent vectors of the inner/outer shapes at their current border positions
I.e., all one needs is an expression for the derivative of each shape's border, from which one can compute arc length (via numerical integration, if necessary) and tangent vectors
Nice application. Will also use it to learn the way you designed the algorithm.
Cool!