Categories
Drawing Adinkra Symbols using Python

Akoma Ntoaso

Akoma Ntoaso is the symbol for understanding and agreement.

We will use the 5 pixel grid to trace out this image. The image of this is shown below:

Analyzing the Symbol

Akoma Ntoaso consists of a circle with lines radiating out from it which connect to semi-circles that are perpendicular to those lines.

The Plan to Draw Symbol

To draw this symbol, we will draw the circle first then move from one quadrant to the other and complete the shape.

We will start from the upper right quadrant and draw the semi-circle and the connecting line then move clockwise until the entire symbol is completed.

Algorithm to Draw the Symbol

The algorithm to draw the Akoma Ntoaso symbol is shown below:

  1. Move the turtle to the position (0, -70)
  2. Draw a filled circle of radius 70 pixel
  3. Draw a line in the upper left quadrant from (-165, 30) to (-30, 165)
  4. Draw a semi-circle in the upper left quadrant and fill it
  5. Draw a line from the center of the circle to the upper left semi-circle
  6. Draw a line in the upper right quadrant from (30, 165) to (165, 30)
  7. Draw a semi-circle in the upper right quadrant and fill it
  8. Draw a line from the center of the circle to the upper right semi-circle
  9. Draw a line in the lower right quadrant from (165, -30) to (30, -165)
  10. Draw a semi-circle in the lower right quadrant and fill it
  11. Draw a line from the center of the circle to the lower right semi-circle
  12. Draw a line in the lower left quadrant from (-30, -165) to (-165, -30)
  13. Draw a semi-circle in the lower left quadrant and fill it
  14. Draw a line from the center of the circle to the lower left semi-circle

Using Turtle Graphics

We will use the template.py file and rename it to akoma_ntoaso.py. However, we have to add some code to draw diagonal lines that will cut across the grid.

The code to do this is given below:

def coordinateDistance(x1, y1, x2, y2):
dx = x1 – x2
dy = y1 – y2
D = math.sqrt((dx * dx) + (dy * dy))
return D

turtle.penup()
turtle.setposition(-200, 200)
turtle.setheading(315)
diagonalLength = coordinateDistance(-200, 200, 200, -200)
turtle.pendown()
turtle.forward(diagonalLength)

turtle.penup()
turtle.setposition(-200, -200)
turtle.setheading(45)
diagonalLength = coordinateDistance(-200, -200, 200, 200)
turtle.pendown()
turtle.forward(diagonalLength)

turtle.pencolor(0, 0, 0)

turtle.setheading(0)
turtle.penup()
turtle.home()

The function coordinateDistance calculates the distance between two extreme ends of the grid.

Now we can start drawing the symbol.

The code for steps 1 and 2 is given below:

turtle.penup()
turtle.setposition(0, -70)
turtle.pendown()
turtle.begin_fill()
turtle.circle(70)
turtle.end_fill()

The generated image is show below:

For step 3 we draw a line from (-165, 30) to (-30, 165). To do this, we move the turtle to the position (-165, 30) and we set the heading to 45 degrees.

Next we find the distance between the two points we want our line to extend to and move the turtle that distance.

The code to do this is shown below:

turtle.penup()
turtle.setposition(-165, 30)
turtle.setheading(45)
diagonalLength = coordinateDistance(-165, 30, -30, 165)
turtle.pendown()
turtle.forward(diagonalLength)

The generated image is shown below:

For step 4 of the algorithm, we draw a semi-circle. The code to do this is given below:

turtle.penup()
turtle.setposition(-30, 165)
turtle.pendown()
turtle.setheading(135)
turtle.begin_fill()
turtle.circle(diagonalLength/2, 180)
turtle.end_fill()

The generated image is shown below:

Step 5 of the algorithm is easy. We return the turtle back to the center of the grid and draw a line connecting the circle to the semi-circle.

The code to do this is shown below:

turtle.penup()
turtle.home()
turtle.setheading(135)
turtle.pendown()
turtle.pensize(30)
turtle.forward(diagonalLength * 0.75)

The generated image is shown below:

Now that one part of the symbol has been drawn, you will notice that steps 6 to 8, 9 to 11 and 12 to 14 are basically a repeat of steps 3 to 5.

This means that we could use a single function to draw the symbol. I will leave this as an exercise for you.

For step 6, we move the pen to the position (30, 165) and we draw a line to position (165, 30).

The code to do this is shown below:

turtle.penup()
turtle.home()
turtle.pensize(1)
turtle.setposition(30, 165)
turtle.setheading(-45)
diagonalLength = coordinateDistance(30, 165, 165, 30)
turtle.pendown()
turtle.forward(diagonalLength)

The generated image is shown below:

Next we proceed to draw the semi-circle in the upper right quadrant. The code to do this is shown below:

turtle.penup()
turtle.setposition(165, 30)
turtle.pendown()
turtle.setheading(45)
turtle.begin_fill()
turtle.circle(diagonalLength/2, 180)
turtle.end_fill()

The generated image is shown below:

Now we draw the line to join the semi-circle to the circle.

The code to do this is shown below:

turtle.penup()
turtle.home()
turtle.setheading(45)
turtle.pendown()
turtle.pensize(30)
turtle.forward(diagonalLength * 0.75)

The generated image is shown below:

Next we draw a line in the lower right quadrant. The code to do this is shown below:

turtle.penup()
turtle.home()
turtle.pensize(1)
turtle.setposition(165, -30)
turtle.setheading(-135)
turtle.pendown()
turtle.forward(diagonalLength)

The generated image is shown below:

We now draw the semi-circle. The code to do this is shown below:

turtle.penup()
turtle.setposition(30, -165)
turtle.pendown()
turtle.setheading(-45)
turtle.begin_fill()
turtle.circle(diagonalLength/2, 180)
turtle.end_fill()

The generated image is shown below:

Now we connect the semi-circle to the center circle. The code to do this is shown below:

turtle.penup()
turtle.home()
turtle.setheading(-45)
turtle.pendown()
turtle.pensize(30)
turtle.forward(diagonalLength * 0.75)

Next we draw a line in the lower left quadrant. The code to do this is shown below:

turtle.penup()
turtle.home()
turtle.pensize(1)
turtle.setposition(-30, -165)
turtle.setheading(135)
turtle.pendown()
turtle.forward(diagonalLength)

We now draw the semi-circle. The code to do this is shown below:

turtle.penup()
turtle.setposition(-165, -30)
turtle.pendown()
turtle.setheading(225)
turtle.begin_fill()
turtle.circle(diagonalLength/2, 180)
turtle.end_fill()

The generated image is shown below:

Finally, we draw the line connecting the semi-circle to the center circle. The code to do this is shown below:

turtle.penup()
turtle.home()
turtle.setheading(225)
turtle.pendown()
turtle.pensize(30)
turtle.forward(diagonalLength * 0.75)

The generated image is shown below:

Complete Code

"""
Project Name: Drawing Adinkra Symbols using Python
Symbol Name: Akoma Ntoaso
Developer Name: Truston Ailende
Email Address: trustonailende@gmail.com
"""
import turtle
import math
 
# Square
def drawSquare(length):
    turtle.penup()
    turtle.setposition(-length/2.0, length/2.0)
    turtle.pendown()
    for i in range(0, 4):
        turtle.forward(length)
        turtle.right(90)
    turtle.penup()
    turtle.home()
 
# Horizontal lines
def drawHorizontalLine(length, division):
    pixelSpace = int(length / division)
    half = int(length / 2)
    for j in range((-half + pixelSpace), half, pixelSpace):
        turtle.penup()
        turtle.setposition(-half, j)
        turtle.pendown()
        turtle.forward(length)
    turtle.penup()
    turtle.home()
 
# Vertical lines
def drawVerticalLine(length, division):
    pixelSpace = int(length / division)
    half = int(length / 2)
    turtle.right(90)
    for k in range((-half + pixelSpace), half, pixelSpace):
        turtle.penup()
        turtle.setposition(k, half)
        turtle.pendown()
        turtle.forward(length)
    turtle.penup()
    turtle.home()
 
# Draw the grid
turtle.speed(1000000)
drawSquare(400)
drawHorizontalLine(400, 40)
drawVerticalLine(400, 40)
 
# Change the colour mode
turtle.colormode(255)
 
# Change the pencolor to red
turtle.pencolor(255, 0, 0)
 
# Draw the horizontal centre line
turtle.setposition(-200, 0)
turtle.pendown()
turtle.forward(400)
turtle.penup()
 
# Draw the vertical centre line
turtle.setposition(0, 200)
turtle.setheading(270)
turtle.pendown()
turtle.forward(400)
 
# Reset all the properties
turtle.home()
 
# Place code here
def coordinateDistance(x1, y1, x2, y2):
    dx = x1 - x2
    dy = y1 - y2
    D = math.sqrt((dx * dx) + (dy * dy))
    return D

# Draw the top left diagonal
turtle.penup()
turtle.setposition(-200, 200)
turtle.setheading(315)
diagonalLength = coordinateDistance(-200, 200, 200, -200)
turtle.pendown()
turtle.forward(diagonalLength)

# Draw the bottom left diagonal
turtle.penup()
turtle.setposition(-200, -200)
turtle.setheading(45)
diagonalLength = coordinateDistance(-200, -200, 200, 200)
turtle.pendown()
turtle.forward(diagonalLength)

# Reset the colour back to black
turtle.pencolor(0, 0, 0)

# Reset the heading to 0
turtle.setheading(0)
turtle.penup()
turtle.home()

# Draw the center circle
turtle.penup()
turtle.setposition(0, -70)
turtle.pendown()
turtle.begin_fill()
turtle.circle(70)
turtle.end_fill()

# Draw a line in the upper left quadrant
turtle.penup()
turtle.setposition(-165, 30)
turtle.setheading(45)
diagonalLength = coordinateDistance(-165, 30, -30, 165)
turtle.pendown()
turtle.forward(diagonalLength)

# Draw a semi-circle in the upper left quadrant
turtle.penup()
turtle.setposition(-30, 165)
turtle.pendown()
turtle.setheading(135)
turtle.begin_fill()
turtle.circle(diagonalLength/2, 180)
turtle.end_fill()

# Draw a line from the center of the circle to the upper left semi-circle
turtle.penup()
turtle.home()
turtle.setheading(135)
turtle.pendown()
turtle.pensize(30)
turtle.forward(diagonalLength * 0.75)

# Draw a line in the upper right quadrant
turtle.penup()
turtle.home()
turtle.pensize(1)
turtle.setposition(30, 165)
turtle.setheading(-45)
diagonalLength = coordinateDistance(30, 165, 165, 30)
turtle.pendown()
turtle.forward(diagonalLength)

# Draw a semi-circle in the upper right quadrant
turtle.penup()
turtle.setposition(165, 30)
turtle.pendown()
turtle.setheading(45)
turtle.begin_fill()
turtle.circle(diagonalLength/2, 180)
turtle.end_fill()

# Draw a line from the center of the circle to the upper right semi-circle
turtle.penup()
turtle.home()
turtle.setheading(45)
turtle.pendown()
turtle.pensize(30)
turtle.forward(diagonalLength * 0.75)

# Draw a line in the lower right quadrant
turtle.penup()
turtle.home()
turtle.pensize(1)
turtle.setposition(165, -30)
turtle.setheading(-135)
turtle.pendown()
turtle.forward(diagonalLength)

# Draw a semi-circle in the lower right quadrant
turtle.penup()
turtle.setposition(30, -165)
turtle.pendown()
turtle.setheading(-45)
turtle.begin_fill()
turtle.circle(diagonalLength/2, 180)
turtle.end_fill()

# Draw a line from the center of the circle to the lower right quadrant
turtle.penup()
turtle.home()
turtle.setheading(-45)
turtle.pendown()
turtle.pensize(30)
turtle.forward(diagonalLength * 0.75)

# Draw a line in the lower left quadrant
turtle.penup()
turtle.home()
turtle.pensize(1)
turtle.setposition(-30, -165)
turtle.setheading(135)
turtle.pendown()
turtle.forward(diagonalLength)

# Draw a semi-circle in the lower left quadrant
turtle.penup()
turtle.setposition(-165, -30)
turtle.pendown()
turtle.setheading(225)
turtle.begin_fill()
turtle.circle(diagonalLength/2, 180)
turtle.end_fill()

# Draw a line from the center of the circle to the lower left quadrant
turtle.penup()
turtle.home()
turtle.setheading(225)
turtle.pendown()
turtle.pensize(30)
turtle.forward(diagonalLength * 0.75)

# End the program
turtle.done()

Where Can it Be Found?

A search of Google for organizations using this symbol yielded the Ghana Stock Exchange. It is the logo of the organization.

Summary

At the end of this post, we have successfully used the Python Turtle environment to draw the Akoma Ntoaso symbol.

The code for this series is available on GitHub. Please feel free to check it out.

Next time, we will look at the Dame Dame symbol.

Support the Series

Using the Adinkra symbols, I created the Adinkra Notebooks Collection.

You can support this series by buying one of them.

Leave a Reply

Your email address will not be published. Required fields are marked *

0 Shares
Tweet
Share
Pin
Share
%d bloggers like this: