Bezier Drawing Program

Bezier Drawing Program  - Alvin Penner – v1.0.7

Table of Contents

            User Interface

- Vector-graphics modes : Select, Edit, Zoom

- Bitmapped mode : Paint

            Common Properties of Objects

            Special Properties of Objects

            Useful Links

            Appendix – Classification of Shapes

User Interface

            The user interface consists of a drawing area on the left (500 x 500 pixels) and an object configuration/selection area on the right. There are four modes of operation, ‘Select’ mode where a new object can be generated or selected, ‘Edit’ and ‘Zoom’ modes where the properties of an object can be modified, and ‘Paint’ mode where the entire screen can be painted. The user can toggle between these  modes using the command buttons to the right, or by hitting the ‘Escape’ key. In addition, if you are in ‘Select’ mode, and if an object is highlighted (orange), then a mouse click (left) will toggle you into ‘Edit’ or ‘Zoom’ mode so you can modify the object. As shown below, not all the modes communicate directly with each other; there are restrictions on which modes are accessible at any one time. ‘Edit’ and ‘Zoom’ are both vector-graphics modes where a specific object is manipulated using handles. ‘Paint’ is a bitmapped mode where no objects actually exist, and the screen is simply filled with color. ‘Select’ is an intermediate mode, where the decision is made as to what to do next, and on which object to do it.

            The purpose of ‘Select’ mode is to either select an existing object or create a new one. To select an existing object, move the mouse over it slowly until it turns orange. Then click the mouse to toggle into ‘Edit’ mode or ‘Zoom’. To create a new object, click on one of the generic types on the right hand side (Ellipse, Hyperbola, Star, etc.) This will create a standard version of this type in the upper left corner. In addition, you can clone an object using the menu item ‘Edit\Copy'. This will produce a duplicate of the selected object in the upper left corner.

            The purpose of ‘Edit’ mode is to modify a specific object. Alternatively, you can clone it using the menu item ‘Edit\Copy', or delete it using ‘Edit\Delete'. In ‘Edit’ mode you can modify any of the properties of the selected object using either graphical handles or textbox entries or using the four arrow keys (↑↓←→) on the keyboard. These properties will be described in detail below. ‘Edit’ mode has the advantage of giving you access to the entire object, with the deficiency that the view you have of the object is at the screen resolution, which is considerably less than the printer resolution. When performing floodfill operations it is sometimes necessary to be more precise than this in order to emulate the printer more closely.

            The ‘Zoom’ mode was created in order to allow you to zoom into a specific area of the screen, at the printer’s resolution. In Zoom mode you can use the mouse to click on an area to zoom into, and that area will be displayed on the right at the resolution of your printer. This can help with precise positioning of objects and it can be quite important when performing a flood fill in a case where there are two curves that appear to touch each other tangentially on the screen but may not be touching when displayed at the printer resolution. When in Zoom mode you will have access to only one or two parameters at a time, due to lack of space, but you can use the mouse to specify which parameters you would like to edit, by clicking on the appropriate handle. Also, it is expected that you would normally use the keyboard arrow keys to edit the parameters, rather than the mouse, in order to give you more precise control.

            The purpose of ‘Paint’ mode is to allow you to perform a bitmapped paint operation of the screen using a floodfill procedure. On the right hand side you will see a color-picker which allows you to select the color. This uses the Hue-Saturation-Luminosity model of color, with H and S being specified in the rectangular area, while L is specified in the vertical bar on the right. You can also type in RGB colors if you wish. This is modeled after the Microsoft Paint program. Once the color is selected, use the left mouse button to floodfill an area in your image. The floodfill will cover all the surrounding area until it encounters a boundary defined by your wireframe model. In addition to this normal paint operation there are two other mouse operations supported. First of all, if you change your mind, you can left-mouse-button click on any area to make that color revert back to the background color. Secondly, if you wish to clone a color already on the image, then right-mouse-button click on it, which will copy it back to the palette, and then you can use the normal left-mouse-button click to paste it onto any new area you wish to color. When you save the file, the program will remember the mouse-click operations you have performed and will attempt to recreate them when you reload this file.

The Paint mode is a radical departure from the rest of the program, which is totally vector-graphics oriented. For this reason, the results of the paint operation may not always be totally predictable if you paint the screen, then edit an object, and then re-paint. Typically the normal development path you would follow is to create the wireframe model first, using the other modes, and then paint the result as the last step before printing it or saving it. The program will remember all the steps you have used in painting, but if you subsequently edit the wireframe model, then the results of the remembered paint procedure after the edit may be unpredictable. Basically, the result of a repaint after an image has been edited depends on the question of whether lines that used to cross are still crossing, and vice versa.

            A word about which operations are allowed at which time. Cloning with ‘Edit\Copy' and deleting with ‘Edit\Delete' from the menu are allowed at any time except in ‘Paint’ mode. Both have keyboard shortcuts, ctrl-C and ctrl-D, useable at this time as well. In addition, the Delete key will be available as well in Select, Edit, and Zoom modes if one of these three Command Buttons has the focus. However, in Edit and Zoom modes, the textboxes will normally have the focus so in this case the Delete key will be used to delete text instead. The ‘Escape’ key will always be functional, it will toggle between the two most recent modes. It will be quite common for you to have to toggle repetitively between two different modes, and the Escape key will facilitate this by remembering what the last mode was and allowing you to quickly go back to it.

            Also, a comment on the relative merits of the mouse versus the keyboard for editing objects. In Paint and Select modes it is expected that all operations will be mouse-driven. At the other extreme, in Zoom mode, because of the precision that is expected, one would normally use the keyboard arrow keys : (↑↓←→). This allows one to easily achieve a precision of one pixel. In Edit mode either approach may work well. For this reason, an attempt has been made to ensure that the focus will always be on a textbox when in Edit or Zoom modes. If the focus is on a textbox, then the keyboard arrow keys are functional and can be used instead of the mouse. For example, if the Scale parameter has the focus, this means that all four arrow keys are functional and can be used to modify both ‘x’ and ‘y’ scale values.

            Finally, a word about screen rendering techniques. If you look closely at the screen in Select, Edit, or Zoom modes,  you will see that at intersections of lines there appears to be a transparent spot, which does not occur in Paint mode. This is because the screen is rendered differently in these two cases. When you are dynamically editing or moving an object, the curves are generated using a logical operation known as an ‘exclusive or’ (XOR). This has the beneficial property that it never destroys any information. For example, the background color may be modified, but not destroyed, so the painting operation is completely reversible, and the new image can be erased as easily as it was created. This leads to a very fast image refresh time, because the background information does not need to be saved. However, it also leads to a situation where two lines that are on top of each other will appear to be transparent even though they are not. On the other hand, when in Paint mode, and also when printing, the screen is rendered using a copy operation which simply overwrites the background and shows you the true color of the output. Therefore, if you want an accurate preview of the printed image before you print it, then toggle into Paint mode to see what it looks like. This is especially useful in the case of curves that are asymptotically merging with each other, approaching a long thin point. However, if you use Paint mode in this way to see a preview, then make sure to toggle back to Select mode before printing, because the Print command is context-sensitive, as discussed below.

            You can print these images in a monotone color of your choice and you can modify the size of the printout using the ‘File\Print Setup …’ menu item. The color choice can be used to modify the intensity of the line. Unfortunately, it depends on what kind of printer you have, so experiment with it. The program will remember the choices you make, such as printing preferences and the last used file name. The Print command is context-sensitive: in Select, Edit, or Zoom modes you will get a wireframe printout in monocolor (very fast); in Paint mode you get a bitmapped output in full color (much slower, and uses ink).

            When you first start the program, you will see a demo project, with the filename ‘BezierDraw.txt’ in the bottom panel. To the right of the filename, you will see the ID number of the object currently selected. When in Select mode you can change this ID by moving the mouse over an object. If you modify the project, you will see an asterisk appear to the right of the ID number, to indicate that an object has changed. In this case, when you exit, you will be prompted to save the changes, preferably under a new filename of your own choosing. You can recall this demo project at any time using the ‘Help\Demo’ menu item, and you can recall your own work using the ‘File\Open’ item.

            Any project can be saved for future reference as a text file, using the ‘File\Save’ or ‘File\Save As…’ menu items. I have tried to reproduce the menu system of the standard Single Document Interface, like the text editor ‘Notepad’, for example. If you would like to comment in any way, choose the menu item ‘Help\About’ and send me an email. If you need help, which is this file, then click on ‘Help\Drawing’, or hit ‘F1’.

            As to output formats, the default format is a text file that can be understood only by this program, although it can be read by anybody. Send that to me if you want to share your images. I could put it up on my website. In addition, if you install PDFCreator on your machine, then you will be able to generate .pdf files from your images. Also, you can use the ‘File\Export’ menu item to produce a ‘Scaleable Vector Graphics’ (*.svg) output. This will be a wireframe image which is web-friendly and can be imported and painted by vector-graphics packages like Inkscape.

            And lastly, a comment on style. As you will see, some of the user interfaces used here appear to be homemade. This is because they are homemade. It is my hope that this program will run on any machine from ’Win 98’ to ‘XP’. The only serious technical requirement I have imposed is that you must have 24-bit color, or better, on your monitor, otherwise the object recognition algorithm won’t work. This may be a problem for some older laptops, hopefully not yours. Apart from that, I do not wish to distribute huge installation packages filled with support files. Therefore I have not used anything that is not in the standard VB6 library; no customized ActiveX controls, cool though they may be. I have used a lot of GDI32 API calls, but hopefully that will not be a problem. In the world of graphics, standardization has never been very popular: witness the difference between Microsoft and Netscape when it comes to support for the SVG format. Or, for that matter, the difference between DirectX technology and OpenGL, when it comes to color palettes. I wasted a few weeks on that one before I realized that I didn’t need either of them. So I have deliberately tried to keep it simple in the hope that it will run as is on your machine. If not, let me know at penner@vaxxine.com. Or visit the gallery at http://www.vaxxine.com/apenner.

            I think that’s it. As to future developments, I am open to suggestions for new object shapes, would like to develop methods of grouping objects together, and would like to try to develop some links with Inkscape which is a very cool editor.

            Hope it works well . . .

            APP (June 2006 and July 2007)

home

Common Properties of Objects

            All two-dimensional line drawings share five properties, or parameters, that can be modified at will without changing the essential shape of the object. These properties are the X and Y coordinates of the origin, the X-axis and Y-axis scale or ‘extent’, and the orientation angle of the object. These five properties are so general that any ellipse, for example, can be made to be identical to any other ellipse by changing these five properties. The same is true of all hyperbolas, parabolas, and straight lines. (Unfortunately, you cannot make an ellipse look like a hyperbola using these properties; that would require a transformation into an imaginary axis, and we won’t go there.)

            All of the objects drawn here will share these five properties. When you are in ‘Edit’ mode, you can modify them by typing into the text boxes for ‘Origin’, ‘Scale’, and ‘Angle’. Or you can use the graphical ‘handles’, or the keyboard arrow keys (↑↓←→). These handles are drawn as black squares and can be manipulated with the mouse. They will appear as follows :

            ■          ■          ■

            ■          ■          ■

            ■          ■          ■

 There are four types of handles available :

1. At the centre is the ‘origin’ handle. This will allow you to translate the object in both the X and Y directions.

2. In the horizontal direction are the two X-axis handles. These will allow you to either change the X-axis scale, or the orientation angle, but not both at the same time.

3. In the vertical direction are the two Y-axis handles. These will allow you to either change the Y-axis scale, or the orientation angle, but not both at the same time.

4. At the four diagonal corners of the rectangle are the ‘sizing’ handles. These will allow you to simultaneously change both the X scale and the Y scale, or the orientation angle, but not both at the same time.

After you grab a handle, the functionality of the handle will depend on the first move you make. If the first move is a rotation then the handle will only cause a rotation, until you release it.

            In addition to the above handles, there is one other property common to all the objects, the ability to rotate about the centre of the display. The intent of this program is to produce designs that are radially symmetric about a centre point. Therefore all objects have a parameter called “# of Planets”. If it is ‘1’ then the object will translate as a single object in the normal way. If it is greater than ‘1’ then the necessary number of ‘planets’ will be produced in such a way that they are radially symmetric about the ‘sun’ at the centre. In this case the normal translation is no longer possible, and manipulating the origin of the object will cause an orbiting motion of all the planets around the sun. You may sometimes need both features. For example, if you wish to re-orient a specific object to align it with some other object, then switch to one planet to edit the orientation, and then switch back to multiple planets to regenerate the whole set.

home

Special Properties of Objects

            In addition to the above five generic properties, individual objects may have special properties, which actually do have the ability to change the shape of the object. These special properties can be modified either in text boxes or combo boxes, or using graphical handles. The handles in this case will be drawn as circles (●) and they will affect only the shape of the object, not the size. They will normally be dimensionless, expressed as a percent, and will not interact in any way with the five common properties described above. There are two types of such handles: those which manipulate the position of a specific point, and those which manipulate a tangent angle. In the case of a point, the point might be the vertical height of the position of maximum width of a tear-shaped object, or it might be the minimum height of a hyperbola. In the case of a tangent, it will typically be the angle of departure either from the origin or from an outermost point of the object. For a ‘tangent’ handle, there will always be a dashed line drawn, indicating the angle of the tangent. Each type of object has some unique handles, as described below :

Line :

            # of Replicates : number of rotated replicates. This can be specified both in Select mode, by using a right-click to produce a popup menu, or in Edit mode, by using a combo box.

The Line is unique in that it is not a two-dimensional object. Therefore the Scale handles had to be implemented as custom handles, not the normal generic handles.

Ellipse :

            # of Replicates : number of rotated replicates. This can be specified both in Select mode, by using a right-click to produce a popup menu, or in Edit mode, by using a combo box.

The Ellipse is unique in that it is the only object that is not produced using Bézier curves.

Hyperbola :

            # of Replicates : choose between 7 styles, vertically symmetric, rotated 45 degrees, or with three vertices. This can be specified both in Select mode, by using a right-click to produce a popup menu, or in Edit mode, by using a combo box.

            Minimum % : specify the height of the minimum point.

            Range % : for the three-fold hyperbola,  specify the vertical position of the third vertex.

The Hyperbola is unique in that it is not a closed-form shape at all, but should be infinite. We have arbitrarily truncated it using a Bézier approximation.

Star :

            # of Vertices : number of unique nodes on the circumference. This can be specified both in Select mode, when first creating the object, or in Edit mode, by using a combo box.

            Vertex Increment : number of nodes to skip when joining vertices. This can be specified both in Select mode, when first creating the object, or in Edit mode, by using a combo box.

            Range % : specify the angle of departure from the outer vertex, as indicated by the dotted line. Zero % means the tangent will point at the centre of the object, 100% means a straight line between vertices.

            Minimum % : specify the height of the minimum point, relative to the position of the Range% handle.

The Star bridges the gap between the class of objects known as polygons and the class of hyperbolas.

Teardrop :

            # of Replicates : number of rotated replicates. This can be specified both in Select mode, by using a right-click to produce a popup menu, or in Edit mode, by using a combo box.

            Options : choose between four shapes discussed below

            Range % : scaled vertical height at the point of maximum width

            Aux. X %, Y % : scaled (x, y) coordinates of a standard Bézier control point which governs the tangent angle and the velocity of departure of the curve at the origin.

The Teardrop shape is unique in that it has the most degrees of freedom. There are two shape handles, which allow you to modify three separate parameters. The top handle (Range) specifies the height of the point at which the maximum width of the teardrop occurs. This can make the tear appear to be more stubby or lean. The second handle (Aux.) controls the behaviour at the origin. It allows you to specify both the angle of departure from the origin, and the ‘velocity’ of the departure, for lack of a better word. This handle is functionally identical to a normal Bézier control point that you would see if you visited a standard Bézier demo.

                Because of the complexity of this shape, there are three subcases that you may wish to choose instead of the ‘General’ case. These subcases are shown in the ‘Options’ combo box. They predetermine the handle at the origin so that you cannot modify it. The shapes are ‘Teardrop’, ‘Cardioid’, and ‘Exclaim !’. In each case the handle at the origin has been pre-calculated for you and then hidden. The reason for hiding it is to simplify the manipulation process, and to avoid interference between a handle that is right at the origin and the origin itself. In this case you might end up moving the handle when perhaps you wished to move the origin. In any case, experiment with these shapes. If you wish to fine-tune a shape and you need more flexibility, then switch back to the ‘General’ option, and the shape will stay the same, but the handle will be re-activated so you can move it.

Limaçon :

            # of Replicates : number of rotated replicates. This can be specified both in Select mode, by using a right-click to produce a popup menu, or in Edit mode, by using a combo box.

            Range % : scaled height of small lobe relative to large lobe, must be positive.

The Limaçon shape is actually a subset of the epiTrochoid class, handled separately because it presents some unique challenges due to a possible singularity at the origin.

hypo- and epi- Trochoids :

            # of Vertices : number of unique nodes on the circumference. This can be specified both in Select mode, when first creating the object, or in Edit mode, by using a combo box.

            Vertex Increment : number of nodes to skip when joining vertices. This can be specified both in Select mode, when first creating the object, or in Edit mode, by using a combo box. For the hypo- shape, the Increment must be less than #Vertices/2. For the epi- shape, the Increment must be less than or equal to #Vertices.

            Range % : specify the height of the minimum point, relative to the height at which the Cycloid limit occurs. Zero means the shape is known as a Rhodonea, 100% means it is a Cycloid. Must be less than 100%, but can be negative.

The Trochoid class is by far the most complex shape used here. It is produced by rolling one ball on the surface of another, see Appendix for more details.

Comment on Mathematical Accuracy :

            As a general comment on these shapes, note that in most cases we have attempted to emulate a precise mathematical shape as closely as possible. However, there are three shapes (Hyperbola, Star, Teardrop) that are simply made up, or they are emulated quite loosely.  In these three cases you will note that the parameters, such as ‘Minimum %’ or ‘Range %’, have a normal range where they produce a shape that looks reasonable. As you move out of this range, the shape rapidly becomes non-standard, possibly unpredictable, with additional loops or unnatural bends. In some cases the effect is similar to a stiff metal rod that has been bent so severely that it warps out of the page into three dimensions and then twists itself to produce a new loop. This is a consequence of using a Bézier approximation which has been constrained to do well at the end-points, not so well in the middle. You may find this effect to be either very annoying, or interesting, depending on whether or not you are a mathematical purist. In either case, it is unavoidable, since there is no other easy and fast way of drawing these shapes.

home

Useful Links

            This program started out as an attempt to interactively draw various conic sections and simple closed shapes like the cardioid. The idea came from various geometrical graphics designs that my daughter produced over the years in the form of birthday cards, etc. The individual geometrical shapes themselves are not necessarily complicated, but they need to be interactively selected, manipulated, scaled, rotated, cloned, grouped, etc., to make something that is aesthetically pleasing. Mathematical descriptions of many of these shapes can be found at the Famous Curves Index. While trying to generate these shapes, it soon became clear that the most efficient way to draw them was to use the Bézier curve. This means that a given shape, like a cardioid, will be approximated using three Bézier curves spliced together. It may sound messy, but it’s not, and it leads to a very fast screen refresh time, which is what it’s all about. Various interactive demos of Bézier curves are available : see UBC demo and UNC demo. These demos will require Java support, so install J2SE Java Runtime Environment (JRE).  (You don’t need the full SDK, just the Runtime Environment, current version is jre-6u1-windows-i586-p-s).

home

Appendix – Classification of Shapes

            There is an excellent Famous Curves Index available on the web. Our purpose here is not to duplicate that, but to define some relationships between the different shapes, and to define the scope of the current program. We have not attempted to reproduce the full range of shapes that are available to any particular object, because sometimes these shapes are not very interesting, or they cannot be simulated easily with a Bezier curve. Therefore a more precise definition of the range of shapes used here may be helpful. Also, the relationship between different shapes is not always clear, so we will try to display it graphically.

            There are two types of shapes produced by the program: those that are homemade, or qualitative, like the Star, Tear, and Hyperbola; and those that have a precise mathematical origin, like the Cardioid, Limaçon, hypoTrochoid, etc. The mathematically precise shapes generally fall into the class of Trochoid, either hypo- or epi-. The general equation for a Trochoid is as follows:

x = (a + b) • cos(t) – c • cos(1 + a/b)•t

y = (a + b) • sin(t) – c • sin(1 + a/b)•t

            We will not try to analyze these equations, except to say that they are ‘parametric’ in nature, not ‘explicit’. That is, the vertical position ‘y’ cannot be defined uniquely in terms of the horizontal position ‘x’. Instead, both ‘x’ and ‘y’ are dependent variables, depending on the third variable ‘t’, which is best thought of as being time. In addition, the shapes are clearly rotational and repetitive in nature, since there are sines and cosines. And finally, there are three separate independent variables (a,b,c) which control the shape of the object. In graphical terms these shapes are obtained by taking a stationary ball of radius ‘a’, and rolling a ball of radius ‘b’ around either its’ outside (epi-) or inside (hypo-). The ball of radius ‘b’ has a pen attached to it at the point ‘P’, and the length of the arm holding the pen is ‘c’, as shown in the attached diagram.

            Also shown here, on the right, is a typical epiTrochoid shape produced using the values a = 5, b = 2, c = 3. This will be discussed below.

            Without any loss of generality, the parameter ‘a’ can be taken to be positive. After that, there are two distinct types of motion possible, namely ‘epi-‘ motion on the outside of the stationary ball with both ‘b’ and ‘c’ positive; and ‘hypo-‘ motion on the inside of the stationary ball with both ‘b’ and ‘c’ negative. The parameters ‘a’ and ‘b’ are inherently different from ‘c’, in that ‘a’ and ‘b’ must be integers. If they are not integers then the curve will never close upon itself and never be completed. The motion will continue forever until the entire area is black. The parameter ‘c’ can be continuously variable; it determines whether there will be a little extra loop or not when the point ‘P’ comes closest to the centre and starts to move away from it. We have deliberately restricted ‘c’ to make sure that this loop occurs, because it makes the shapes more ‘interesting’. This is the restriction that ‘c’ must be larger than ‘b’. The correspondence between these parameters and the variables used in the program is then as follows:

            a = ‘# of Vertices’

            b = ‘Vertex Increment’

            c ~ ‘Range %’

            For each image, there will be a number of lobes which are unique, and ‘a’ determines the number of these lobes. There will also be loops connecting these lobes. For the epi- case, shown above, these loops will occur at a large diameter; for the hypo- case they will occur at a small diameter. The basic difference between the epi- shape and the hypo- shape is that one is the inside-out version of the other.  In either case, the parameter ‘b’ determines the length of these loops. For example, ‘b’ = 1 means that nearest neighbors will be connected by a loop, whereas ‘b’ = 2 means that next-nearest neighbors are connected, and so on. The case ‘b’ = 2 is shown above, where each loop skips one neighbor before joining the next.

The parameter ‘c’ determines the radial extent of the loops, whether they stay close to the centre of the rolling ball or not. Increasing ‘c’ causes both the inner diameter of the object to shrink and the outer diameter to expand. There are two values of ‘c’ that are particularly interesting. The first is the case ‘c’ = ‘b’, which is the ‘Cycloid’ limit in which the extra loops at the minimum diameter disappear entirely, and are replaced by cusps. The second is the case ‘c’ = ‘a + b’, where the inner diameter of the object becomes zero, which produces a flower-petal shape called a ‘Rhodonea’, presumably related to the rhododendron flower. In the program the parameter called ‘Range%’ has been defined in such a way that Range% = 100 corresponds to the ‘Cycloid’ limit and Range% = 0 corresponds to the ‘Rhodonea’ limit. Values of ‘c’ outside this range are perfectly feasible  mathematically, but may not be interesting to look at, so we have excluded them.

            Shown below is a classification of the shapes used here, depending on the relative values of a, b, c.

            To interpret this diagram, note that the top row is the most general, the second row is more specialized because it contains restrictions on ’c’, the third row is even more specialized because it restricts ‘b’,  while the fourth row restricts both ‘b’ and ‘c’.

In general, the epi- case, where the ball ‘b’ rolls on the outside of ‘a’, is physically quite distinct from the hypo- case, where it rolls on the inside. However there is a class of shapes called Rhodonea which seems to lie between these two extremes. The Rhodonea looks like a flower with petals, but its’ parent could be either a hypo- shape or an epi- shape. The only way to distinguish who the parent was, is to measure the rotational frequency of the petals, but this is more of a mathematical distinction than a graphical one, so it can be called a bridge between the two classes of shapes. Otherwise these two classes, epi- and hypo- , are quite distinct from each other and can be easily identified as such in a drawing.

            For the purposes of graphical experimentation the parameter ‘c’ is probably the most interesting because it affects the overall shape so much. However, restricting the value of ‘c’ does not lead to any mathematical simplification. It is only the restrictions on the parameter ‘b’ that lead to a simplification of the equations. For example, the Ellipse is obtained with b = -a/2. This is a second-order explicit polynomial relationship between ‘x’ and ‘y’, much simpler than any parametric equation. Similarly the Limaçon is obtained with b = a. This is a fourth order polynomial relationship between ‘x’ and ‘y’, admittedly a bit messy, but still easier than an implicit parametric relationship.  Finally, there is the Cardioid shape, with the fewest degrees of freedom of all the shapes, but still interesting because it has a mathematical singularity at the origin, which makes it quite difficult to simulate using a Bezier curve.

This covers all of the ‘mathematical’ shapes used by this program.

home

_________________