Colour Cylinder NetLogo Model

Produced for the book series "Artificial Intelligence";

Author: W. J. Teahan; Publisher: Ventus Publishing Aps, Denmark.

powered by NetLogo

view/download model file: Colour-Cylinder.nlogo

WHAT IS IT?

This model demonstrates how colour can be represented in 3 dimensions:
hue, saturation and brightness. These correspond to the dimensions that experiments indicate humans use to perceive colour.


WHAT IS ITS PURPOSE?

The purpose of this model is to show that if humans rely on three dimensions to perceive colour (hue, saturation and brightness), then it is not possible to exactly define precisely the concept of a particular colour (such as red or yellow) as it is not possible to define the boundaries between the different colours shown in the colour spindle or cylinder.


HOW IT WORKS

A drawer agent is used to draw the colour circle or rectangle. Two of the colour dimensions - hue, and saturation - determine what the colour circle looks like for a specific value of brightness. Peter Gardenfors' work with conceptual spaces theory talks about how humans perceive colour using a colour spindle - where the radius of the circle gets progressively smaller as the brightness is increased or decreased, eventually ending up at points for when the brightness is maximum or minimum. In the model, this is when the brightness is set to 255 and 0, and corresponds to the colours white and black, respectively.

As the model's visualisation is limited to 2D, the model depicts a colour cylinder instead of a colour spindle, with each colour circle representing a slice of the cylinder for a specific brightness value.


HOW TO USE IT

Press the setup button first. Then press either the draw-colour-rectangle or draw-colour-circle button next. The brightness slider determines the brightness of the colours that are drawn. The hue-increment and saturation-increment sliders can be used to control how fine the colour is drawn.


THE INTERFACE

The model's Interface buttons are defined as follows:

- setup: This clears everything, makes the background white, and creates a drawer agent ready to draw the colour circle or rectangle.

- draw-colour-rectangle: This draws a colour rectangle for a specific brightness value. The hue is the x dimension and the saturation is the y dimension.

- draw-colour-circle: This draws a colour circle for a specific brightness value. The hue values are spread out around the 360 degrees of the circle, and the saturation values are spread out along various radii lengths from 0 to 255 from the centre of the circle.

The model's Interface sliders are defined as follows:

- brightness: This controls the brightness of the colour drawn.

- hue-increment and saturation-increment: This controls the increments used when drawing the colours. Smaller increments will mean that the drawing has finer detail.


THINGS TO NOTICE

Notice how difficult it is to define the region for a specific colour. For example, try drawing an imaginary line around everything that is yellow.


THINGS TO TRY

Try using the brightness slider to change the brightness value to see what effect it has on the colour circle and colour rectangle. Change the values of the hue-increment and saturation-increment sliders to change how fine an increment is used to draw the colour circle. Increasing the size of the increments will result in symmetrical patterns being drawn. Why is this? Try doing this while the circle is being drawn.

You can draw a border to the circle by modifying the following code:

[ set pcolor hsb-as-rgb ] ; set this to a specific color if you want to draw a border
; to the circle

Change "hsb-as-rgb" in the above code to the colour you want for your border. For example, if you want it to be black, set it to 0, if you want it to be blue, set it to 105.


EXTENDING THE MODEL

Have a go at adding labels to the colour circle such as red, yellow and green. Alternatively, set up a HubNet activity where each student chooses where to place colour labels. See how well they match across the classroom.


NETLOGO FEATURES

It uses the NetLogo command hsb to generate the patch colours based on the hue, saturation and brightness values. The patch-at-heading-and-distance command is used to draw the colour circle.


CREDITS AND REFERENCES

This model was created by William John Teahan.

To refer to this model in publications, please use:

Colour Cylinder NetLogo model.
Teahan, W. J. (2010). Artificial Intelligence. Ventus Publishing Aps


PROCEDURES

; Colour Cylinder model.
;
; Used to demonstrate how colour can be represented in 3 dimensions:
; hue, saturation and brightness.
;
; Copyright 2010 William John Teahan. All Rights Reserved.

breed [ drawers drawer ]
globals [ my-drawer ]

to setup
  ask patches [ set pcolor white ] ; set background to white
  
  create-drawers 1 ; used for drawing the color circle or rectangle
  [ set color red
    set size 0 ; make invisible
    set xcor 0
    set ycor 0
    set my-drawer self ]
end

to draw-colour-rectangle
; displays the colours in a 2D environment
  let hue 0
  let saturation 0
  let h 0
  let s 0
  let hsb-as-rgb []

  set h min-pxcor  
  while [h <= max-pxcor]
  [ ; spread out the different hues across the environment's x co-ordinates
    set hue (max-pxcor + h) / 2
    
    set s min-pxcor
    while [s <= max-pycor]
    [ ; spread out the different saturations across the environment's y co-ordinates
      set saturation (max-pycor + s) / 2
      
      set hsb-as-rgb hsb hue saturation brightness
      ask patch h s
      [ set pcolor hsb-as-rgb ]
      
      set s s + 1
    ]
    set h h + 1
  ]
end

to draw-colour-circle
; displays the colours in a 2D colour spindle
  let hue 0
  let hue-heading 0
  let reset-heading 0 ; for resetting the heading so that red is at 270 degrees
  let saturation 0
  let hsb-as-rgb []

  set hue-heading 0
  
  while [hue-heading < 360]  
  [ ; spread out the different hues across headings from 0 to 360 degrees
    set hue (hue-heading * 256) / 360 ; scale 360 degrees down to 256 hues

    set saturation 0
    while [saturation < 256]
    [ ; spread out the different saturations from 0 to 255
      ; use saturation as the distance in patch-at-heading-and-distance below
      ask my-drawer
      [ 
        set hsb-as-rgb hsb hue saturation brightness
        set reset-heading (hue-heading + 270) mod 360
        ask patch-at-heading-and-distance reset-heading saturation
        [ ifelse (saturation > 252)
          [ set pcolor hsb-as-rgb ] ; set this to a specific color if you want to draw a border to the circle
          [ set pcolor hsb-as-rgb ]
        ]
      ]

      set saturation saturation + saturation-increment
    ]
    
    set hue-heading hue-heading + hue-increment
  ]
end
;
; Copyright 2010 by William John Teahan.  All rights reserved.
;
; Permission to use, modify or redistribute this model is hereby granted,
; provided that both of the following requirements are followed:
; a) this copyright notice is included.
; b) this model will not be redistributed for profit without permission
;    from William John Teahan.
; Contact William John Teahan for appropriate licenses for redistribution for
; profit.
;
; To refer to this model in publications, please use:
;
; Teahan, W. J. (2010).  Colour Cylinder NetLogo model.
;   Artificial Intelligence. Ventus Publishing Aps.
;