Vector Graphics for the Web

Drawing Complex Shapes in RaphaelJS

The SVG path element is used for drawing complex shapes in the SVG path specification. It is the most complex element for drawing built-in shapes.

Paths represent the geometry of the outline of an object using commands. They take a single attribute to describe what to draw. In SVG the path element is represented by d will take the path string. In RaphaelJS, the path string is given to the library to handle drawing.


We will use a grid of 500 by 500 pixels to cover the topic of paths. The code to create the grid is given below:

		<title>Paths Arrow Absolute</title>
			#container {
				background:url(grid.jpg) repeat;
				display: block;
				margin: 0 auto;
		<div id="container"></div>
		<script src=""></script>
			paper = Raphael('container', 500, 500);
			// Write Code Here

The grid image is shown below:

Grid Image

General Commands

All path commands are used in capital letters when used in absolute coordinates and lower case when used in relative coordinates.

M or m

This is the move command. It moves the drawing of the path to a point specified by the user.

Z or z

This closes the path of a path string returning it to the point where the path started from. It ends a point by connecting it back to its initial point.

Line Commands

L or l

This draws a line from the current point to a specified end point.

H or h

This draws a horizontal line from the current point to a specified end point.

V or v

This draws a vertical line from the current point to a specified end point.

Bring it all Together

In this section, we shall draw a simple arrow. The code to do this is shown below:

paper.path("M100 200 H300 V150 L450 250 L300 350 V300 H100 Z");

Generating the arrow shown in the diagram below:

Arrow Generated with Absolute Paths

Now let us examine the commands that create the arrow.

M100 200 makes the starting point of the drawing at 100, 200 of the grid. Note that the origin of the drawing is in the top left corner of the grid.

H300 V150 draws a horizontal line to the point that is 300 from the origin and then a vertical line to 150 on the grid is drawn.

L450 250 L300 350 draws a line to point 450, 250 and then 300, 350 on the grid.

V300 H100 draws a line vertically to the point 300 on the y axis of the grid and a horizontal line of back to point 100 on the x axis.

Z completes the shape by drawing a line back to the initial point M.

To use relative paths, we would do this differently as we would have to take the relative position of each point. The advantage of using relative paths is that we can move the shape just by moving one point.

The code to draw the arrow using relative paths is shown below:

paper.path("M100 200 h200 v-50 l150 100 l-150 100 v-50 h-200 z");

M100 200 like the command for absolute paths will start the drawing at the point 100,200 of the grid.

h200 will draw a horizontal line of length 200 from the starting point. v-50 will draw a line 50 in the negative direction.

l150 100 draws a line from the current point to the tip of the arrow. l-150 100 draws a line from the tip of the arrow to the lower left section.

v-50 h-200 draws the remaining parts of the arrow. z completes the arrow.

Curve Commands

They are used for drawing curves. There are 3 types of curves in SVG, they are:

  1. Quadratic Curve
  2. Cubic Curve
  3. Arc Curve

Quadratic Curve

The quadratic curve takes in two coordinates. The first one is the location of the control point for drawing the curve and the second one is the end point for the curve.

The code:

paper.path("M100 200 Q150 100 200 200");

Will create the arc shown below:

Quadratic Curve

Suppose we move the control point to 200, 200 with the code shown below:

paper.path("M100 200 Q200 200 200 200");

We will get a quadratic curve that looks like this:

Quadratic Curve with Control Point on a Line

Note that the curve now is a straight line. This is because the control point is in the middle and on the same line with the start and end point of the curve.

The code:

paper.path("M100 200 Q150 100 200 200 T 300 200");

Will create a inverse of the curve and drag it to an end point giving the quadratic curve shown below:

Sine Wave

Cubic Curve

The cubic curve has 2 control points unlike the quadratic curve.

The code consist of a control points at 120, 160 and 180, 240 with the new position of the curve at 200, 200 is written as:

paper.path("M100 200 C120 160, 180 240, 200 200");

This creates the path:

Cubic Curve

Arc Curve

The arc curve takes the following parameters:

rx ry x-axis rotation y-axis rotation large arc flag sweep flag x y

The code:

paper.path("M100 200 A100 100, 0, 0 1, 200 200");

Will draw the curve shown below:

Drawing an Arc


Paths become too complex to create manually and you should use a vector graphics editor like Inkscape. However, understanding the above commands will help you understand what the program is doing under the hood.

Python Programming

Programming Languages

Computer programming languages allow us to give instructions to a computer in a language the computer understands.

The diagram above shows how programming languages hide details from the user.

At the base of the diagram, we have the computer hardware.

The hardware refers to the part of the computer that we can see and touch.

To control a computer, we need to use a machine language. Each computer has it’s own machine language and programmers found it hectic to have to learn because it was in binary.

As time when on, the Assembly Language was developed. Assembly Language provided a symbolic representation of the machine code needed to program a given CPU architecture.

The real breakthrough in computer programming would start with the arrival of high level languages.

High level languages were closer to English and in addition to making the task of computer programming easier, they also opened the field to a lot more people.

The top four from that period in computing history are C, BASIC, FORTRAN and COBOL.

Applications running this languages are still in use today.

We will be learning the Python programming language.

According to the TIOBE Index as at January 2020, the Python programming language is the 3rd most popular programming language in the world.

Each language has it’s strength and weakness but for absolute beginners, I will give my reasons why recommend learning the Python programming language first.


When you are starting out on the journey of learning to code, you don’t want to deal with problems that occur while setting up your computer.

While learning Java at the University, one of the biggest issues we would run into was the setting of classpath.

The issue of classpath would stop many beginners dead in their tracks.

In Python, once you have installed the interpreter, you are ready to start programming.

In addition, the language is simple and readable. The commands in the language look like English.


Python is a general purpose language that caters to every use case that you can imagine.

It might not beat a specialized language in its domain but it will allow you get started in any domain.

Large Community

The true secret weapon of the Python programming language is the community.

The versatility of the Python programming language is due to the libraries developed by the community.


As technology become more integrated with everyday life, learning how to program will become important in being a member of the society.

For absolute beginners, the Python programming language is great for starting because it is simple and easy to use.

Learn Python in One Week

If you want a quick and easy introduction to the Python programming language, you should check out my fifth book: Learn Python in One Week on the Amazon store.